【发布时间】:2017-07-12 14:48:17
【问题描述】:
我有一个关于 JFrame 的问题。 这是我刷新 JFrame 并从第 1 页更改到第 2 页的代码示例。 我删除了错误的组件并添加了正确的组件。在大代码中,添加什么和删除什么会非常混乱。
package test;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class GUI {
public static void main (String[] args){
GUI g = new GUI();
}
JFrame frame;
JTextField page1;
JTextField page1Text;
JTextField page2;
JTextField page2Text;
JButton button1;
JButton button2;
public GUI(){
frame = new JFrame();
frame.setSize(600, 600);
frame.setLayout(null);
page1 = new JTextField("Page 1");
page1.setBounds(20, 20, 100, 50);
page1Text = new JTextField("Text 1");
page1Text.setBounds(20, 80, 100, 50);
page2 = new JTextField("Page 2");
page2.setBounds(20, 20, 100, 50);
page2Text = new JTextField("Text 2");
page2Text.setBounds(20, 80, 100, 50);
button1 = new JButton("Button 1");
button1.setBounds(20, 200, 100, 50);
button2 = new JButton("Button 2");
button2.setBounds(130, 200, 100, 50);
frame.add(page1);
frame.add(page1Text);
frame.add(button1);
frame.add(button2);
frame.setVisible(true);
ActionHandler handler = new ActionHandler();
button1.addActionListener(handler);
button2.addActionListener(handler);
}
private class ActionHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == button1){
frame.remove(page2);
frame.remove(page2Text);
frame.add(page1);
frame.add(page1Text);
frame.repaint();
}
else if (event.getSource() == button2){
frame.remove(page1);
frame.remove(page1Text);
frame.add(page2);
frame.add(page2Text);
frame.repaint();
}
}
}
}
有没有办法在不同的类或构造函数或文件中创建页面并将其保存为例如 page_1。然后在 ActionHandler 中我写了
if (event.getSource() == button1){
page_1();
frame.repaint();
}
使框架在正确的空间中具有第 1 页的正确组件。
【问题讨论】:
-
您最好使用
CardLayout,请参阅:docs.oracle.com/javase/tutorial/uiswing/layout/card.html
标签: java swing user-interface jframe repaint