Java 使用GridBagLayout单击按钮后添加组件的新行
我试图在单击前一行中的按钮后添加新行组件 这一数字: 显示单击“添加”按钮后要在下一行复制的行 我试图做的事情给了我这个结果: 但只有在我第一次单击“添加”按钮,然后完成项目选择之后 如何使“添加”按钮独立于其他组件,以及如何调整可视化 代码如下:Java 使用GridBagLayout单击按钮后添加组件的新行,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我试图在单击前一行中的按钮后添加新行组件 这一数字: 显示单击“添加”按钮后要在下一行复制的行 我试图做的事情给了我这个结果: 但只有在我第一次单击“添加”按钮,然后完成项目选择之后 如何使“添加”按钮独立于其他组件,以及如何调整可视化 代码如下: ////// First row // First Column gbc.weightx = 0.5; gbc.gridx = 1; gbc.gridy = 0; this.add(this.field,
////// First row
// First Column
gbc.weightx = 0.5;
gbc.gridx = 1;
gbc.gridy = 0;
this.add(this.field, gbc);
// Second Column
gbc.gridx++;
this.add(this.operator, gbc);
// Third Column
gbc.gridx++;
this.add(this.value, gbc);
////// Second row
gbc.gridx = 0;
gbc.gridy = 1;
this.add(rowNumber, gbc);
// First Column
gbc.gridx = 1;
//////////////////////////////////////////////////// SET DIMENSION
attrList.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXX");
this.add(attrList, gbc);
// Second Column
gbc.gridx = 2;
//////////////////////////////////////////////////// SET DIMENSION
opListString.setPrototypeDisplayValue("XXXXXXX");
this.add(opListString, gbc);
// Third Column (Hidden)
gbc.gridx = 3;
////////////////////////////////////////////////////SET DIMENSION
sessoBox.setPrototypeDisplayValue("XXXXXXXXXXXXXX");
this.add(sessoBox, gbc);
sessoBox.setVisible(false);
////////////////////////////////////////////////////SET DIMENSION
titoloBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXXXX");
this.add(titoloBox, gbc);
titoloBox.setVisible(false);
// Fourth Column
gbc.gridx = 4;
remButton = new JButton("Rem");
this.add(remButton, gbc);
// Add row JButton
gbc.gridx = 5;
gbc.gridy = 1;
this.add(addRow, gbc);
// Add empty JLabel to positioning components at the top
gbc.weighty = 10;
gbc.gridx = 1;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
this.add(emptyLabel, gbc);
// Add Action Listener on Attributes to choose
// Display Value Components based on item selected
attrList.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String choose = attrList.getSelectedItem().toString();
switch(choose) {
case "----------------": {
removeItem();
break;
}
case "Sex": {
removeItem();
addOpsString();
addValueComp2(sessoBox);
}
}
}
});
// Remove row
/*remButton.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
remButton.remove((addRow));
}
});
*/
// Add row
addRow.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
gbc.gridy = ++rowNum;
gbc.gridx = 0;
panel.remove(emptyLabel);
panel.add(new JLabel(Integer.toString(rowNum)), gbc);
gbc.gridx++;
panel.add(attrList);
gbc.gridx++;
panel.add(opListString);
gbc.gridx++;
gbc.gridx++;
panel.add(remButton);
gbc.gridx++;
panel.add(addRow);
// Add empty JLabel to positioning components at the top
gbc.weighty = 10;
gbc.gridx = 1;
gbc.gridy = rowNum + 1;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
panel.add(emptyLabel, gbc);
}
});
如果您希望复制整行,那么您可能应该将每一行设置为一个组件,例如JTable或JPanel,然后将这些组件中的每一个放置在另一个JPanel或JFrame中。然后可以使用Object.clone()方法创建每个新组件(行)。添加行时,可能需要打包()或验证()新的外部组件,特别是在外部窗口的大小发生更改时
或者,如果对象数量有限,则可以在初始化时创建所有对象,并在需要时使用setVisible()显示每个对象。1)该任务似乎更适合
JTable
。2) 为了更快地获得更好的帮助,请添加or。这不是一个直接的答案-但对于任何Swing布局任务,我只使用MigLayout: