显示GridBagLayout

时间:2015-11-19 11:29:08

标签: java swing jscrollpane layout-manager gridbaglayout

我使用Swing在Java中编写一个简单的计算器,并且我在使用GridBagLayout时遇到了问题。

这是我如何切割我的组件:

my window

enter image description here

你可以看到,cos sin tan%log sqrt sqr和pi按钮不应该远离其他按钮。

此外,当我在程序启动时缩小窗口大小时会发生这种情况:

enter image description here

按钮以我希望它们显示的方式显示,但JTable显示得很奇怪。

这里有关于主窗口的一些信息:

首选尺寸:600 * 600 Jtable:没有设置大小信息

并且GridBagConstraints对象中的每个组件的权重属性都设置为0(我认为它可能来自此

编辑:一些代码!这是我用来初始化按钮的枚举,所以你可以看到GridBagConstraints。

//new GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, 
//int anchor, int fill, Insets insets, int ipadx, int ipady);
ZERO("0", 96, new GridBagConstraints(5,5,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        ONE("1", 97, new GridBagConstraints(4,4,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        TWO("2", 98, new GridBagConstraints(5,4,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        THREE("3", 99, new GridBagConstraints(6,4,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        FOUR("4", 100, new GridBagConstraints(4,3,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        FIVE("5", 101, new GridBagConstraints(5,3,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        SIX("6", 102, new GridBagConstraints(6,3,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        SEVEN("7", 103, new GridBagConstraints(4,2,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        EIGHT("8", 104, new GridBagConstraints(5,2,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        NINE("9", 105, new GridBagConstraints(6,2,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        DOT(".", 110, new GridBagConstraints(6,5,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        PLUS("+", 107, new GridBagConstraints(7,2,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        MINUS("-", 109, new GridBagConstraints(7,3,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        DIVIDE("/", 111, new GridBagConstraints(7,5,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        MULTIPLY("*", 106, new GridBagConstraints(7,4,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        MODULO("%", 0, new GridBagConstraints(7,6,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        EQUAL("=", 10, new GridBagConstraints(4,5,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        CLEAR("C", 67, new GridBagConstraints(7,1,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        BACKSPACE("Bck", 8, new GridBagConstraints(7,0,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        CLEARHISTORY("Clear history", 72, new GridBagConstraints(0,7,4,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        COSINUS("cos", 72, new GridBagConstraints(4,6,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        SINUS("sin", 72, new GridBagConstraints(5,6,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        TANGENT("tan", 72, new GridBagConstraints(6,6,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        SQUAREROOT("sqrt", 72, new GridBagConstraints(5,7,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        SQUARE("sqr", 72, new GridBagConstraints(6,7,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        LOGARITHM("log", 72, new GridBagConstraints(4,7,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
        PLUSMINUS("±", 72, new GridBagConstraints(7,7,1,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0));

这是我初始化视图的代码:

        CALCULATIONSHISTORYLABEL(new GridBagConstraints(0,0,4,1,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)),
        CALCULATIONSHISTORYTABLE(new GridBagConstraints(0,1,4,6,0,0,GridBagConstraints.CENTER,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)),
        CURRENTCALCULATIONLABEL(new GridBagConstraints(4,0,3,1,0,0,GridBagConstraints.LINE_END,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)),
        CURRENTRESULTLABEL(new GridBagConstraints(4,1,3,1,0,0,GridBagConstraints.LINE_END,
                GridBagConstraints.NONE,new Insets(5,5,5,5),0,0));

/*...*/

    public View() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("simpleCount");
        setPreferredSize(new Dimension(800, 800));
        setLayout(new GridBagLayout());
        calculationsHistoryView = new JTable();

        GridBagConstraints c = new GridBagConstraints();
        add(new JLabel("Calculations History"), ComponentPlacement.CALCULATIONSHISTORYLABEL.gbc);
        add(new JScrollPane(calculationsHistoryView), ComponentPlacement.CALCULATIONSHISTORYTABLE.gbc);

        add(currentCalculationView, ComponentPlacement.CURRENTCALCULATIONLABEL.gbc);
        add(currentResultView, ComponentPlacement.CURRENTRESULTLABEL.gbc);
        for (int i = 0; i < Button.values().length; i++) {
            add(buttonsView.getButtons()[i], Button.values()[i].gbc);
        }
        pack();
        setVisible(true);
        requestFocus();
    }

有人可以帮助我吗?

提前感谢您的回答。

2 个答案:

答案 0 :(得分:3)

不要在整个框架中使用单个布局管理器。

默认布局管理器是框架的BorderLayout,我会坚持这个。

然后你可以创建一个&#34;按钮面板&#34;使用GridBagLayout并使用以下命令添加面板:

frame.add(buttonPanel, BorderLayout.LINE_END);

然后你可以创建另一个&#34;左面板&#34;它可能再次使用BorderLayout。那么你可以

  1. 将顶部标签添加到BorderLayout.PAGE_START
  2. 将表格添加到BorderLayout.CENTER
  3. 将底部标签添加到BorderLayout.PAGE_END
  4. 最后将左侧面板添加到框架中:

    frame.add(leftPanel, BorderLayout.CENTER);
    

    现在框架中的所有额外空间都将转到表格。

答案 1 :(得分:-1)

我认为可能存在两个问题:

  1. 尝试将表格滚动的拉伸宽度和高度设置为0.1到1.0(大于零),并将拉伸策略设置为GridBagLayout.BOTH
  2. 设置{table}容器minPrefferedHeight()的{​​{1}}和minPrefferedWidth()
相关问题