Как избежать дублирования столбцов JTable в Java?
Я хочу добавить cloumn в jtable при нажатии на кнопку радио. но когда я нажимаю на нее дважды, в таблицу добавляются два столбца. вот мой код
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");
}
не знаю как это исправить..
3 ответа
Этот код поможет вам. Вызовите метод ниже для actionPerformed флажка, и если это правда. Проверка его на основе заголовка столбца.
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...
}
Чтобы найти и добавить / удалить столбец.
Посмотрите, как использовать кнопки, флажки и кнопки радио, чтобы узнать больше