我不喜欢下面的代码是:
actionPerformed
方法变得臃肿 那么,有没有更好的方法来控制单个类的所有GUI操作?
如果我在每个相应的页面(actionPerformed
)中定义JPanel
方法,则每个页面都需要访问切换到的页面的实例,并且我正在尝试避免为每个页面使用Singleton
模式...
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
*
* @author Ian A. Campbell
*
*/
public class Controller implements ActionListener {
/**
* instance variables:
*/
private Frame frame;
private OptionPage firstPage;
private FirstOptionPage firstOption;
private SecondOptionPage secondOption;
/**
*
*/
public Controller() {
// instantiating the frame here:
this.frame = new Frame();
/*
* instantiating all pages here:
*
* NOTE: passing "this" because this class
* handles the events from these pages
*/
this.firstPage = new OptionPage(this);
this.firstOption = new FirstOptionPage(this);
this.secondOption = new SecondOptionPage(this);
}
/**
*
*/
public void start() {
this.frame.add(this.firstPage); // adding the first page
// NOTE: these lines prevent blank loading and flickering pages!
this.frame.validate();
this.frame.repaint();
this.frame.setVisible(true);
}
/**
*
* @return the JFrame instantiated from the class Frame
*/
public Frame getFrame() {
return this.frame;
}
@Override
public void actionPerformed(ActionEvent e) {
// the "first option" button from the OptionPage:
if (e.getSource() == this.firstPage.getFirstButton()) {
this.frame.getContentPane().removeAll();
this.frame.getContentPane().add(this.firstOption);
// the "second option" button from the OptionPage:
} else if (e.getSource() == this.firstPage.getSecondButton()) {
this.frame.getContentPane().removeAll();
this.frame.getContentPane().add(this.secondOption);
}
// NOTE: these lines prevent blank loading and flickering pages!
this.frame.validate();
this.frame.repaint();
this.frame.setVisible(true);
}
} // end of Controller
答案 0 :(得分:2)
使用Card Layout
。 Card Layout Actions添加了一些您可能会发现有用的额外功能。
答案 1 :(得分:1)
您可以使用卡片布局,也可以获得创意并删除元素。例如:
panel.remove((JButton)myButton1)); // Remove all of the elements...
panel.add((JButton)myButton2)); // Add the new elements
当然我根本不会处理内置GUI的java,IMO的布局设计很可怕。我宁愿使用像“新面貌”这样的东西 - http://www.javootoo.com/。