当单击单选按钮时,我想向jtable添加一个cloum。但是当我点击它两次时,两列被添加到表中。这是我的代码
dtm = (DefaultTableModel) viewTable.getModel();
dtm.setRowCount(0);
TableColumnModel model=viewTable.getColumnModel();
boolean found=false;
for (int i = 0; i < viewTable.getColumnCount(); i++) {
if (model.getColumn(i).getIdentifier().equals("customer Id")) {
found=true;
break;
}
if (found==false) {
dtm.addColumn("customer Id");
}
不知道如何修复。
此代码将对您有所帮助。对复选框的actionPerformed调用以下方法,如果它为true。基于列标头验证它。
private static void addColumn( final JTable table, final String newColumnHeader )
{
final JTableHeader header = table.getTableHeader();
final int columnCount = header.getColumnModel().getColumnCount();
boolean addColumn = true;
for( int index = 0; index < columnCount; index ++ )
{
final Object headerValue = header.getColumnModel().getColumn(index).getHeaderValue();
if( newColumnHeader.equals( headerValue ) )
{
JOptionPane.showMessageDialog(null, "Column already exists" );
addColumn = false;
break;
}
}
if( addColumn )
{
final TableColumn newCol = new TableColumn();
newCol.setHeaderValue(newColumnHeader);
table.getColumnModel().addColumn(newCol);
}
}
如果已经单击了复选框,则最好禁用该复选框;)如果你不想要一个巨大的代码。
这是一个笨拙的解决方案,但它会起作用。
您可以在类中创建一个新的布尔变量,该变量表示是否设置了列。类似:
class MyClass{
boolean isColumnAdded
public MyClass(){
isColumnAdded = false;
}
private void radioButtonActionPerformed(java.awt.event.ActionEvent evt){
if(!isColumnAdded){
//add column
isColumnAdded = true;
}
}
}
首先,JRadioButton
具有selected
属性。您应该检查此状态以确定是否需要删除或添加列。。。
假设每个列名都是唯一的,您可以使用类似。。。
TableColumnModel model = viewTable.getColumnModel();
int index = -1;
try {
index = model.getColumnIndex("customer Id");
} catch (IllegalArgumentException e) {
// I know, sucks...
}
if (index < 0) {
// Add new column, if JRadioButton.isSelected
} else {
// Remove old column...
// JRadioButton.isSelected is false...
}
查找并添加/删除列。
查看如何使用按钮、复选框和单选按钮以了解更多详细信息