我最近開發的軟件應用程序主要是非常基本的,而且我遇到了問題。
我正在開發的應用程序有許多不同的菜單和屏幕,我希望JFrame能夠在單擊按鈕時顯示。
由於這是大多數應用程序似乎要實現的功能,所以我可以看到令人驚訝的很少的信息,這讓我想知道我的方法是否完全關閉,但是是說明這種方法的一些示例代碼。
因此,我的問題是,a)什麼是實現這個目標的最佳方式,以及b)我現在的代碼有什麼問題?但前一個問題是最重要的。動態JFrame - 更改JFrame內容
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Demo {
JFrame frame;
JButton nextButton = new JButton ("Next Screen");
public void setup() {
frame = new JFrame();
frame.setVisible(true);
frame.add(new PanelOne());
frame.pack();
}
public class PanelOne extends JPanel { {
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.add(new JLabel("Label One"));
this.add(new JLabel("Label Two"));
this.add(new JLabel("Label Three"));
this.add(new JLabel("Label Four"));
this.add(new JLabel("Label Five"));
JButton button = new JButton("Next Screen");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
swapPanel();
}
});
this.add(button);
} }
public class PanelTwo extends JPanel {{
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.add(new JButton("Button One"));
this.add(new JButton("Button Two"));
this.add(new JButton("Button Three"));
this.add(new JButton("Button Four"));
this.add(new JButton("Button Five"));
}}
protected void swapPanel() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.removeAll();
frame.add(new PanelTwo());
frame.invalidate();
frame.revalidate();
}
});
}
public static void main (String[] args) {
Demo demo = new Demo();
demo.setup();
}
}
用於交換顯示組件,使用[CardLayout(https://開頭的文檔。 oracle.com/javase/tutorial/uiswing/layout/card.html)。另外,問題是什麼? – kiheru
感謝您的回覆,我更明確地提出了我的問題。我在問什麼是實現我的目標的最好方法,並且如果可能的話,解釋我的方法出了什麼問題。 – quantum285
可能的[重複](http://stackoverflow.com/q/5654926/230513)。 – trashgod