Is it normal to put all Java Swing GUIs in one class?

I just started swing development and had problems Is it normal to put the whole GUI into a single class? The application I'm building has a JFrame that displays multiple different "pages" For example, if a user clicks a button, they will be taken to a completely different page with a different layout I have configured the card layout, and the card I have built so far uses the gridbag layout

Well, my question is 1 Should each page have its own class? 2. How do they communicate between the GUI controller running the card layout and the pages? 3. Or I should put all GUIs into the GUI controller and let it run like that

Here's my code so far. I'm a novice and really want to be good at it, so if you find any major problems I missed, please point them out at any time

Code for a single page:

public class HomePage extends JPanel implements ActionListener{
    private GridBagLayout gl;
    private JPanel frm;
    JButton newPersonalContact;
    HomePage(){
         frm=new JPanel();
         gl=new GridBagLayout();
         GridBagConstraints gbc=new GridBagConstraints();
         frm.setLayout(gl);

         newPersonalContact=new JButton("New Personal Contact");
         JButton newBusinessContact=new JButton("New Business Contact");
         JButton showAllContacts=new JButton("Show All Contacts");
         JButton saveAndQuit=new JButton("Save and Quit");

         JPanel top=new JPanel();
         top.setBackground(new Color(218,165,32));
         top.add(new JLabel("Western Governers University Presents:"));


         JPanel middle=new JPanel();
         middle.setBackground(new Color(43,37,85));
         GridLayout ge=new GridLayout(4,4);
         middle.setLayout(ge);

         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(newPersonalContact);


         middle.add(newBusinessContact);
         middle.add(new JLabel(""));
         middle.add(new JLabel(""));
         middle.add(showAllContacts);

         middle.add(saveAndQuit);
         middle.add(new JLabel(""));middle.add(new JLabel(""));
         middle.add(new  JLabel(""));
         middle.add(new JLabel(""));

         JPanel bottom=new JPanel();
         bottom.setBackground(new Color(218,32));

         gbc.fill=GridBagConstraints.BOTH;
         gbc.weightx=1.0;

         gbc.weighty=2.0;
         gbc.gridx=0;
         gbc.gridy=0;
         frm.add(top,gbc);

         gbc.weighty=6.0;
         gbc.gridx=0;
         gbc.gridy=1;
         frm.add(middle,gbc);

         gbc.weighty=1.0;
         gbc.gridx=0;
         gbc.gridy=2;
         frm.add(bottom,gbc);

         newPersonalContact.addActionListener(this);
         newBusinessContact.addActionListener(this);
         showAllContacts.addActionListener(this);
         saveAndQuit.addActionListener(this);


}
    public void actionPerformed(ActionEvent ae){
    if (ae.getSource()==newPersonalContact){
        //What goes here?
    }

}
public JPanel getFrame(){
    return frm;
}

}

GUI controller code:

public class GUIController {
    JFrame frm;
    cardlayout cl;
    Container pane;
GUIController(){
frm=new JFrame();
frm.setSize(800,600);
frm.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

JPanel card2=new JPanel();
card2.setBackground(Color.black);

JPanel cards=new JPanel(new cardlayout());
cards.add(new HomePage().getFrame(),"Home");
cards.add(card2,"New Personal Contact");
pane=frm.getContentPane();
pane.add(cards,BorderLayout.CENTER);





}
public void start(){
    this.frm.setVisible(true);

}
public void showCard(){
    cl.show(pane,"Card2");
}


}

Although this is for the school project, the GUI interface is not just the learning content I am interested in Thanks for your help.

Solution

No, I don't recommend putting all GUI code in class - at least if it gets big and does a few things

In this case, use mediator mode:

>Place the subcomponents in the self defined subclass of JPanel > this subclass listens to the events of its child nodes and updates other child nodes > if necessary, you can trigger custom events

Also note: if you want to learn GUI programming and do not have specific requirements for using swing, consider using the newer GUI toolkit JavaFX

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>