Как избежать дублирования столбцов 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...
}

Чтобы найти и добавить / удалить столбец.

Посмотрите, как использовать кнопки, флажки и кнопки радио, чтобы узнать больше

Другие вопросы по тегам