如何显示多个布局的多个JPanel?

时间:2015-08-05 22:52:21

标签: java jframe jpanel

我一直致力于这个项目的工作,我一直坚持这个问题。我是新手,并且不太了解编程术语,所以如果有人可以帮助解释为什么我的程序不起作用会很棒。

程序的目的是以10x10布局显示随机生成的1和0的矩阵,并在顶部有一些具有功能的按钮。我只是想了解如何展示所有内容。

提前致谢。

UPDATE :: Told提供我的所有代码将有所帮助

public class Module5 extends JFrame {

private static JTextArea area = new JTextArea();
private static JFrame frame = new JFrame();
private static JPanel general = new JPanel();
private static JPanel buttons = new JPanel();
private static JPanel numbers = new JPanel();
private static JButton button0 = new JButton("Reset to 0");
private static JButton button1 = new JButton("Resset to 1");
private static JButton buttonReset = new JButton("Reset");
private static JButton quit = new JButton("Quit");

public static class Numbers extends JPanel {

    public Numbers() {
        area.setText(Integer.toString((int) Math.round(Math.random())));
        this.add(area);
    }    

    public void Module5(){

        numbers.setLayout(new GridLayout(10, 10));
        for (int i = 0; i < 100; i++) {
            this.add(new Numbers());
        }
    }
}

public static void main (String[] args) {

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.setVisible(true);

    general.setLayout(new BoxLayout(general, BoxLayout.Y_AXIS));
    general.add(buttons);
    general.add(numbers);

    buttons.add(button0);
    buttons.add(button1);
    buttons.add(buttonReset);

    buttons.add(quit);
    quit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            System.exit(0);
        }
    });
}

}

1 个答案:

答案 0 :(得分:0)

由于这看起来像家庭作业,我会给你一些指示,但我不打算给你代码。

  1. Module5的构造函数移出数字类并移入其自己的类中。同时从中删除void返回类型,使其成为正确的构造函数。

  2. 将main中的代码移动到Module5的构造函数中。这是主框架,所以当你构建一个新框架时,它应该在这里初始化,而不是在main。并立即删除setVisible来电(详见第6号)

  3. 执行1和2后,删除frame变量,Module5JFrame,因此只需更改与frame有关的任何内容关键字this(意为此Module5对象)

  4. 同时将area变量移到Numbers类中 - 否则每个Number实际上将共享相同的文本区域,这不是您想要的。

  5. 不要将您的变量设为static,不应该这样。

  6. 一旦完成所有操作,请确保它在Event Dispatch Thread上运行,方法是制作这样的主方法(我将给你的一段代码)

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                Module5 mod5 = new Module5();
                mod5.setVisible(true);
            }
        });
    }