Добавление кнопок внутри ячейки JTable вместе с данными?
Вопрос
Можно ли добавить кнопки внутри ячейки JTable вместе с данными? Что я пытаюсь сделать, так это создать таблицу с столбцами, которые отображают данные (число) из базы данных, и две кнопки для увеличения/уменьшения числа внутри одной и той же ячейки.
| Id | Количество |
|06| 2 [+][-] |
Это было бы что-то вроде выше с [+] [-] кнопками. Поэтому, когда я нажимаю [+], число изменится на 3 и 1, если нажимать [-].
Решение
Да, это возможно, хотя это не будет легко.
Вы должны написать свой собственный обычай клеточный рендеринг И твоя собственная Редактор ячейки.
Это образец, который я сделал за 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
для данной колонки. Предложение Joonas использовать JSpinner
хороший, который работает хорошо.
Я думаю, что вам нужно создать пользовательский рендеринг сотовой связи, если вы хотите показать что -то еще, кроме текста (или чисел) в ячейке. Работа рендеринга ячейки состоит в том, чтобы нарисовать все, что вам нужно, чтобы показать в ячейке.
Видеть Документация таблицы.
Таким образом, в этом случае вы можете создать небольшой jpane, который содержит текстовое поле и крошечные кнопки + и - кнопки - или просто компонент Jspinner, если вам нужно. Немного сложно, конечно, но должно быть возможно.