2016-01-01 2 views
0

Я сейчас читаю лист excel (.xls) и размещаем его в JTable. Лист Excel состоит из 3 столбцов. Я с успехом могу это прочитать. Однако при чтении листа excel я хочу добавить дополнительный четвертый столбец в JTable, который включает JButtons (одна кнопка для каждой строки). Когда JButton щелкнут по строке, я хочу взять содержимое третьего столбца и выполнить какое-то действие.
В настоящее время я использую код от here.Добавление JButton в столбце JTable (JAVA)

Каков наилучший способ добавить JButtons в колонку JTable?

+0

Это только мое мнение, но кнопки в таблицах - это режим отображения даты, почему бы не позволить пользователю выбирать одну или несколько строк, а затем использовать внешнюю кнопку для выполнения действий (действий) по выбранным строкам? – MadProgrammer

+0

Проблема в том, что задача требует использования кнопок в JTable. –

+1

Взгляните на [Столбец таблицы стола] (https://tips4java.wordpress.com/2009/07/12/table-button-column/), вы также захотите взглянуть на [Концепции: Редакторы и Renderers] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender), [Использование пользовательских рендерингов] (http://docs.oracle.com/javase/tutorial/uiswing/ components/table.html # renderer) и [Использование других редакторов] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editor) для получения более подробной информации. – MadProgrammer

ответ

0

Вы можете добавить свою кнопку таким образом.

class MyRenderer implements TableCellRenderer { 

    JButton button = new JButton(); 

    public Component getTableCellRendererComponent(JTable table, 
      Object value, 
      boolean isSelected, 
      boolean hasFocus, 
      int row, int column) { 

     button.setText(value.toString()); 
     return button; 
    } 

и добавить действие слушателю сделать это

class mybutttoneditor extends AbstractCellEditor implements TableCellEditor, 
      ActionListener { 

     JTable table; 
     JButton button = new JButton(); 



     public mybutttoneditor(JTable table) { 
      this.table = table; 

      button.setFont(new Font("Serif", Font.BOLD, 14)); 
      button.setForeground(Color.blue); 
      button.addActionListener(this); 
     } 

     public void actionPerformed(ActionEvent e) { 
      final int row = table.getEditingRow(); 
     String column3data=table.getValueAt(row, 2); 
     //do what you want with the data here 
     //hopefully this helps and if so accept the answer 
     } 
     //other abstract methods are here 
     } 
} 

    DefaultTableModel md=(DefaultTableModel)mytable.getModel(); 

    //do this while reading your excel sheet 

    Object row[]={"dataone","datatwo","data3","Open Button"}; 
    md.addRow(row); 
    TableColumnModel colModel = mytable.getColumnModel(); 
    colModel.getColumn(3).setCellRenderer(new MyRenderer()); 
    colModel.getColumn(3).setCellEditor(new mybutttoneditor(mytable)); 
+0

Вы можете конвертировать свой лист excell в CSV и читать его напрямую без использования excel lib – NemugaM

+0

Теперь, как OP реагирует на события с помощью кнопки? – MadProgrammer

+0

@MadProgrammer вам удалось сначала отобразить кнопку в таблице? это первый шаг. – NemugaM

0

Вы можете создать класс, расширяющий JButton. Затем добавьте свойство к этому классу. (Поле с геттером и сеттер) при добавлении данных в таблицу, добавьте экземпляр JButton для каждой строки, используя свой собственный класс JButton и задайте значение в третьем столбце, используя метод setter. Таким образом, вы можете использовать это значение при обработке в событии click. Надеюсь, это поможет :)

Смежные вопросы