Добавление кнопок внутри ячейки JTable вместе с данными?
можно ли добавить кнопки внутри ячейки JTable вместе с данными? Я пытаюсь создать таблицу со столбцами, которые отображают данные (число) из базы данных, и две кнопки для увеличения/уменьшения числа внутри той же ячейки.
/ ID / количество/
|06| 2 [+][-] |
Это было бы что-то вроде выше с кнопками [ + ] [ -]. Поэтому, когда я нажимаю [ + ], число изменится на 3 и 1, если нажать [ -].
3 ответов
Да, это возможно, хотя это будет нелегко.
вы должны написать свой собственный визуализатора и свой редактор ячейки.
это образец, который я сделал за 5 минут:
Он далек от совершенства, но показывает концепцию.
вот исходный код:
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;
}
}
вот поток, который может быть интересные и здесь.
как говорится в учебник вам понадобится как визуализатор для отображения вашего значения, так и редактор для обнаружения событий из редактируемой ячейки. В этом пример на Component
Это JCheckBox
. Обратите внимание, что для этого требуется специальная DataModel
что расширяет AbstractTableModel
чтобы поставить правильный Class
для данного столбца. Предложение джунаса использовать JSpinner
хорошо, что хорошо работает.
Я думаю, вам нужно создать пользовательский визуализатор ячейки, если вы хотите показать что-либо еще, кроме текста (или чисел) в ячейке. Задача визуализатора ячейки-нарисовать все, что вам нужно, чтобы показать в ячейке.
посмотреть таблица визуализации документации.
таким образом, в этом случае вы можете создать небольшую JPane, которая содержит текстовое поле и крошечные кнопки + и - или просто компонент JSpinner, если делает то, что вам нужно. Немного сложно, конечно, но должно быть вероятный.