Java GUI不同类中的不同页面

时间:2017-07-12 14:48:17

标签: java swing user-interface jframe repaint

我对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页的正确组件。

1 个答案:

答案 0 :(得分:0)

您最好的选择听起来就像将每个页面作为jpanel放在一个单独的类中,根据人工输入相应地设计您的面板,在内容窗格中显示/隐藏这些面板