Нужно добавить JCheckBox в JTable динамически - PullRequest
2 голосов
/ 07 августа 2011

у меня два JTable. В одном JTable.

есть определенное количество записей.

После загрузки первого JTable я хочу загрузить равное число JCheckbox для создания во второй таблице.

У меня есть такой сценарий ... VL передать обе таблицы в методе addCheckBox.

private void addCheckBox(JTable procTableSrc, JTable procTableCk){

    CheckBoxRenderer checkBoxRenderer = new CheckBoxRenderer();
    EachRowRenderer rowRenderer = new EachRowRenderer();
    int rows = procTableSrc.getRowCount();

    DefaultTableModel dm = (DefaultTableModel)procTableCk.getModel();

    Object [] data = new Object[][]{{new Boolean(false)},{new Boolean(false)}}; 

    for(int i=1; i <=rows; i++){
        rowRenderer.add(i, checkBoxRenderer);           
        //model.addRow(new Object []{new Boolean(false)});
    }
}

Пожалуйста, помогите мне с кодом в достижении этого.

1 Ответ

5 голосов
/ 07 августа 2011

Спасибо за ваши правки, но вы все еще можете показать нам больше и рассказать, какие ошибки вызывает ваш текущий код.

Что касается вашего класса "CheckBoxRenderer", вам это не нужно.Пожалуйста, прочитайте учебник по JTable, который вы можете найти здесь .Там вы увидите, что все, что вам нужно сделать, это переопределить метод getColumnClass вашей табличной модели, чтобы вернуть Boolean.class для интересующего столбца, чтобы он отображал флажки.

Удача.

Редактировать 1
Также, что с "рендерингом строк", и какой цели он служит?Чтобы добавить информацию в ваш JTable, вы должны добавить строки в его модель, и я не вижу, чтобы ваш код делал это.Взгляните на API DefaultTableModel, где вы увидите метод addRow (...), который может вам очень помочь.Либо так, либо создайте новый объект DefaultTableModel с вашими массивами данных.На самом деле, это, вероятно, лучше, поскольку вы можете затем переопределить его метод getColumnClass (), чтобы он возвращал логическое значение для столбца, для которого необходимо установить флажки.

Редактировать 2
Также это выиграноне компилируется, поскольку вы объявляете его как одномерный массив и инициализируете его как двумерный массив .:

Object [] data = new Object[][]

Попробуйте сделать следующее:

  • Создайте2-мерный массив объектов Object, в котором хранятся данные вашей модели.Первый индекс массива - это количество строк, отображаемых в JTable, а второй - количество столбцов.
  • Заполните каждую позицию столбца логическими значениями.
  • Создайте новый объект DefaultTableModelтот, который переопределяет getColumnClass (...) и возвращает его Boolean.class для столбца, который содержит логические значения и должен отображать флажки.
  • Дайте ему конструктор, который позволяет передавать в 2-DМассив объектов и, возможно, массив строк для заголовков столбцов.Первая строка конструктора должна быть вызовом супер-конструктора, и вам нужно будет передать параметры массива в этот вызов.
  • вызовите setModel для вашего объекта procTableCk, передавая эту модель, которую вы только что создали.
...