Swingowa aplikacja

0

Chciałbym napisać prostą aplikację swingową (jak zalączniku)

@Component
public class MainController {

    @Autowired
    private MainFrame frame;

    @PostConstruct
    private void init() {
        frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
        frame.setSize(new Dimension(1200, 800));
        frame.setVisible(true);
    }

}
@Component
public class MainFrame extends JFrame {

    private JPanel mainPanel = new JPanel();
    private JPanel menuPanel;
    private JPanel contentPanel = new JPanel();

    public MainFrame() {
        init();
    }

    private void init() {
        JScrollPane scrollPane = new JScrollPane(mainPanel);
        scrollPane.setVisible(true);
        add(scrollPane, BorderLayout.CENTER);

        contentPanel.setVisible(true);
        contentPanel.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        contentPanel.setLayout(new CardLayout());

        menuPanel = new MenuPanel(contentPanel);
        menuPanel.setVisible(true);

        mainPanel.setVisible(true);
        mainPanel.setLayout(new BorderLayout());
        mainPanel.add(menuPanel, BorderLayout.NORTH);
        mainPanel.add(contentPanel, BorderLayout.CENTER);
    }
}

Chodzi o jakiś menu panel z przyciskami w górnej części frame i w głównej części chciałbym żeby podmieniały mi się panele w zalezności od tego który z buttonów się uruchomi.
Gdzie powinno się dodać akcje buttonów tak żeby zachować ład w kodzie?
Same przyciski będę tworzył w MenuPanel, ale jeśli tam miałbym dodać mouseListenera to musiałbym przekazywać referencję do contentPanelu

0

Jeżeli swing to tu masz kawałek kodu może Ci coś pomoże.

 
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class frame extends JFrame {
    JPanel panel = new JPanel();
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    
    JButton button1 = new JButton("Przycisk 1");
    JButton button2 = new JButton("Przycisk 2");
    JButton button3 = new JButton("Przycisk 3");
    
    JLabel label = new JLabel("Panel 1");
    JLabel label2 = new JLabel("Panel 2");
    JLabel label3 = new JLabel("Panel 3");
    
   frame() {
       setResizable(false);
       setSize(1000, 1000);
       northPanel();
       startView();
   } 
   
   public void northPanel() {
       button1.addActionListener(listener);
        button2.addActionListener(listener);
        button3.addActionListener(listener);
        GridBagLayout layout = new GridBagLayout();
        panel.setLayout(layout);
        GridBagConstraints c = new GridBagConstraints();
        c.gridx=0;
        c.gridy=0;
        panel.add(button1, c);
        c.gridx=1;
        c.gridy=0;
        panel.add(button2, c);
        c.gridx=2;
        c.gridy=0;
        panel.add(button3, c);
        add(panel, BorderLayout.NORTH);
   }
    public void startView() {
        panel1.add(label);
        add(panel1, BorderLayout.CENTER);
    }
   
    ActionListener listener = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
      String chose = e.getActionCommand();
        switch(chose) {
            case "Przycisk 1": {setPanel1(); break;}
            case "Przycisk 2": {setPanel2();
            break;}
            case "Przycisk 3": {setPanel3(); break;}
            default: { startView();}
        }
        }
    };
     public void offPanel() {
        panel1.setVisible(false);
        panel2.setVisible(false);
        panel3.setVisible(false);
    }
    public void setPanel2(){
        offPanel();
        panel2.add(label2);
        add(panel2, BorderLayout.CENTER);
        panel2.setVisible(true);
    }
   public void setPanel1() {
       offPanel();
       panel1.add(label);
       add(panel1, BorderLayout.CENTER);
       panel1.setVisible(true);
   }
   public void setPanel3() {
       offPanel();
       panel3.add(label3);
       add(panel3, BorderLayout.CENTER);
       panel3.setVisible(true);
   }
    
}
0

Z jakiegos konketnego powodu robisz wszystko w init?

    public void createButton(String buttonName,ActionListener listener)
    {
        JButton jButton = new JButton(buttonName);
        jButton.addActionListener(listener);
        menuPanel.add(jButton);
    }

I później w konstruktorze jak juz wywalisz tego inita

createButton("First", e -> swapPanel(panelToSwap));
0

robisz to wszystko z palucha? nie łatwiej przy pomocy IntelliJ lub NetBeans?

1 użytkowników online, w tym zalogowanych: 0, gości: 1