我刚刚开始使用摇摆开发并遇到问题。将整个GUI放入单个类是否正常?我正在构建的应用程序有一个显示多个不同“页面”的JFrame。例如,如果用户点击按钮,则他们将被带到具有不同布局的完全不同的页面。我已经配置了卡布局,到目前为止我构建的一张卡使用了GridBag布局。
我的问题是
1.每个页面是否应该有自己的类?
2.如果他们如何在运行卡片布局的GUI控制器和各个页面之间进行通信?
3.或者我应该将所有GUI放入GUI控制器并让它像那样运行。
以下是我到目前为止所拥有的代码,我是新手,我真的很想擅长这一点,所以如果你发现我错过的任何重大问题,请随时指出。
单个页面的代码:
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,165,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控制器的代码:
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");
}
}
虽然这是针对学校项目的,但GUI界面并不仅仅是我感兴趣的学习内容。谢谢你的帮助。
答案 0 :(得分:4)
不,我不建议将所有GUI代码放在课堂上 - 至少如果它变得很大并做了几件事。
在这种情况下,使用Mediator模式:
另请注意:如果您要学习GUI编程并且没有使用Swing的特定要求,请考虑使用较新的GUI工具包JavaFX。
答案 1 :(得分:3)
如果GUI类变得庞大且笨重,将它划分为几个类是切合实际的。
这样做的一种方法是为每个“页面”创建一个类。让HomePage类具有保存对“页面”对象的引用的实例变量。