在单击上一行中的按钮后,我试图添加新行的组件。
这个数字:
在单击“添加”按钮后,在下一行显示要复制的行。
我试图做的事情给了我这个结果:
但是只有在我首先单击“添加”按钮之后,才完成项目选择。
如何使“添加”按钮独立于其他组件,以及如何调整可视化效果?
代码如下:
////// 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);
}
});
答案 0 :(得分:0)
如果要复制整个行,则可能应将每一行设置为一个组件,例如JTable或JPanel,然后将每个组件放置在另一个JPanel或JFrame中。然后,您可以使用Object.clone()方法创建每个新组件(行)。添加一行时,您可能需要pack()或validate()新的外部组件,尤其是在更改外部窗口的大小的情况下。
或者,如果对象数量有限,则可以在初始化时创建所有对象,并在需要时使用setVisible()显示每个对象。