2010-01-15 3 views
8

Можно ли добавлять кнопки внутри ячейки JTable вместе с данными? То, что я пытаюсь сделать, - создать таблицу со столбцами, отображающими данные (число) из базы данных, и две кнопки для увеличения/уменьшения числа внутри одной и той же ячейки.Добавление кнопок внутри ячейки JTable вместе с данными?

ID: Количество |
| 06 | 2 [+] [-] |

это будет что-то вроде выше с кнопками [+] [-]. Поэтому, когда я нажимаю [+], число будет изменяться на 3 и 1, если нажать [-].

ответ

15

Да, возможно, хотя это будет непросто.

Вы должны написать свой собственный cell renderer и свой собственный cell editor.

Это пример я сделал за 5 минут:

sample

Это далеко от совершенства, но показывает концепцию.

Вот исходный код:

import java.awt.Component; 
import java.awt.Font; 
import javax.swing.*; 
import javax.swing.table.*; 
import java.awt.Dimension; 

public class CustomCell { 
    public static void main(String [] args) { 
     Object [] columnNames = new Object[]{ "Id", "Quantity" }; 
     Object [][] data  = new Object[][]{ {"06", 1}, {"08", 2} }; 

     JTable table = new JTable(data, columnNames) { 
      public TableCellRenderer getCellRenderer(int row, int column) { 
       return new PlusMinusCellRenderer(); 
      } 
     }; 

     table.setRowHeight(32); 
     showFrame(table); 
    } 

    private static void showFrame(JTable table) { 
     JFrame f = new JFrame("Custom Cell Renderer sample"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(new JScrollPane(table)); 
     f.pack(); 
     f.setVisible(true); 
    } 
} 

class PlusMinusCellRenderer extends JPanel implements TableCellRenderer { 
     public Component getTableCellRendererComponent(
          final JTable table, Object value, 
          boolean isSelected, boolean hasFocus, 
          int row, int column) { 
       this.add(new JTextField(value.toString() )); 
       this.add(new JButton("+")); 
       this.add(new JButton("-")); 
       return this; 
     } 
} 

Вот нить, которая может быть interesting и here.

+1

Можно ли добавить на эти кнопки ярлыки actionListeners? – cp101020304

+0

Кнопки на самом деле не доступны; должен ли я добавить свой собственный MouseListener или что-то подобное для этого? – ricky3350

1

Я думаю, вам нужно создать собственный рендеринг ячеек, если вы хотите показать что-либо еще, кроме текста (или цифр) в ячейке. Задача рендеринга ячейки - рисовать все, что вам нужно показать в ячейке.

См. Table Renderer documentation.

Итак, в этом случае вы можете создать небольшой JPane, который содержит текстовое поле, а также маленькие кнопки + и - или только компонент JSpinner, если он делает то, что вам нужно. Немного сложно, конечно, но должно быть возможно.

1

Как описано в разделе tutorial, вам понадобится как средство визуализации для отображения вашего значения, так и редактор для обнаружения событий из редактируемой ячейки. В этом exampleComponent является JCheckBox. Обратите внимание, что для этого требуется настраиваемый DataModel, который расширяет AbstractTableModel для подачи правильного Class для данного столбца. Предложение Joonas использовать JSpinner является хорошим, который хорошо работает.

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