2013-04-28 29 views
2

我有添加行到GridBagLayout的代码,但我无法弄清楚如何删除它。当某个按钮被点击时,我想摆脱布局的最后一行。如何删除GridBagLayout的行

这是增加了它们的代码:

public static JPanel createLayout(int rows) { 
    JPanel product = new JPanel(new GridBagLayout()); 
    String[] lables = {"School ", "Advanced #", "Novice # "}; 
    double weight = .3333333333333; 

    GridBagConstraints c = new GridBagConstraints(); 
    c.insets = new Insets(3, 3, 3, 3); 
    c.weightx = weight; 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.anchor = GridBagConstraints.CENTER; 
    c.gridy = 1; 
    for (int j = 0; j < lables.length; j++) { 
     c.gridx = j; 
     JLabel l = new JLabel(lables[j]); 
     product.add(l, c); 
    } 

    for (int i = 0; i < rows; i++) { 
     c.gridy++; 
     for (int j = 0; j < lables.length; j++) { 
      c.gridx = j; 
      JTextField f = new JTextField(); 
      product.add(f, c); 
     } 
    } 
    c.gridy++; 
    c.gridx = 0; 
    c.anchor = GridBagConstraints.NORTHWEST; 
    c.fill = GridBagConstraints.NONE; 

    JPanel b = new JPanel(); 
    JButton add = new JButton("+"); 
    b.add(add); 
    JButton delete = new JButton("-"); 
    b.add(delete); 
    product.add(b, c); 
    return product; 
} 
public static void main(String[] args) throws IOException { 
    JFrame frame = new JFrame("Debate Calculator"); 
    JPanel debates = new JPanel(); 
    frame.add(createLayout(5), BorderLayout.NORTH); 
    frame.pack(); 
    frame.setVisible(true); 
} 

那么,如何删除行?

+3

使用['JTable'(http://docs.oracle.com/javase/tutorial/uiswing/components/table.html),这是它的设计为 – MadProgrammer 2013-04-28 23:33:30

回答

2

如果你坚持自己做这一切,你将需要维护某种模型,所以你知道一切都在哪里。

首先将各行组件添加到某种List。当你删除一行时,你可以简单地找到组成该行的所有组件,并将它们从容器中移除。

这会向您提出问题。因为最后一行的y位置可能与行数相匹配。 (即,您不能简单地执行c.gridy = listOfComponents.size()来确定添加下一行的位置)。

GridBagConstraints但是,您可以获取用于布局给定组件的约束条件。这意味着您可以找到list中的最后一行,获得第一列的约束条件,并且您将能够推断出最后一个y的位置......有关详细信息,请参阅GridBagConstraints#getConstraints

或者你可以只使用一个JTable

+0

+1建议使用一个JTable,一次又一次.... – camickr 2013-04-29 00:35:22

+0

感谢更复杂的答案JTable无法满足复杂的要求的情况下! – Daniel 2017-01-11 20:26:23