Weighty在GridBagLayout中不起作用

时间:2015-04-27 06:39:14

标签: java swing layout gridbaglayout

enter image description here

以上是我想要实现的目标:

    JFrame以东的
  1. 是固定宽度为JPanel
  2. 小组使用GridBagLayout
  3. 此面板中的组件均水平拉伸
  4. 最后一个组件填充额外的y空间
  5. 最后一个组件是JscrollPane包裹JTable
  6. 我做了很多次试验,都失败了:

    1. 我尝试setPreferredSize的面板,然后内部组件不会水平拉伸。 (我知道如何使用GridBagConstraints,或者我认为我知道)
    2. 我尝试设置面板的大小,然后大小实际上由JscrollPane确定。
    3. 我试图在另一个JPanel中扭曲JscrollPane(因为我不太相信JScrollPane),没用。
    4. GridBagContraints.weighty从不在此项目中运行,但在其他地方运行良好。
    5. 所以我认为问题在于JTable,它始终是一个代理。如红线所示的300 * 300矩形。 enter image description here

      今天是另一个糟糕的日子,有了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 个答案:

答案 0 :(得分:0)

只需为constraints.fill = GridBagConstraints.VERTICAL设置JScrollPane