提问者:小点点

重量在GridBagLayout中不起作用


以上是我想要达到的目标:

  1. JFrame的东部是一个固定的400宽度的JPanel
  2. 面板使用GridBagLayout
  3. 该面板中的组件均水平拉伸
  4. 最后一个组件填充多余的y空间
  5. 最后一个组件是封装JTableJscrollPane

我有过许多试验,都失败了:

    < li >我尝试设置面板的PreferredSize,这样内部组件将不会水平拉伸。(我知道如何使用GridBagConstraints,或者我认为我知道) < li >我尝试设置面板的大小,但大小实际上是由JscrollPane决定的。 < li >我尝试在另一个JPanel中扭曲JScrollPane(因为我不太信任JscrollPane),但没有用。 < Li > gridbagcontraints . weighty在此项目中从不运行,但在其他地方运行良好。

今天又是糟糕的一天,swing的setPreferredSize和setSize以及所有这些大小问题。希望有人能帮忙,谢谢!

    private JPanel buildInfoPanel() {
        JPanel panel = new JPanel();
        panel.setVisible(false);

        GridBagLayout gbl = new GridBagLayout();
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridx = 0;
        panel.setLayout(gbl);

        label_player = new JLabel("label_player");
        label_player.setBackground(Color.RED);
        constraints.gridy = 0;
        constraints.anchor = GridBagConstraints.NORTH;
        gbl.setConstraints(label_player, constraints);
        panel.add(label_player);

        label_deck = new JLabel("label_deck");
        label_deck.setBackground(Color.BLUE);
        constraints.gridy++;
        gbl.setConstraints(label_deck, constraints);
        panel.add(label_deck);

        JTable table = new JTable(new ShipTableModel());
        table.setAutoCreateRowSorter(true);
        table.setFillsViewportHeight(true);
        table.getRowSorter().toggleSortOrder(2);

        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setBorder(new LineBorder(Color.red));
        constraints.gridy++;
        constraints.weighty = 1;
        gbl.setConstraints(scrollPane, constraints);
        panel.add(scrollPane);
        return panel;
    }

    class ShipTableModel extends AbstractTableModel {

        private Ship[] ships = new Ship[0];
        private String[] columnNames = {"id", "name", "lv", "hp", "舰队", "舰种", "mId"};

        @Override
        public String getColumnName(int col) {
            return columnNames[col];
        }

        @Override
        public int getRowCount() { 
            return ships.length; 
        }

        @Override
        public int getColumnCount() { 
            return columnNames.length; 
        }
    }

共1个答案

匿名用户

只需设置< code > constraints . fill = GridBagConstraints。< code>JScrollPane的垂直。