Добавление кнопок внутри ячейки JTable вместе с данными?

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

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

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

3 ответов


Да, это возможно, хотя это будет нелегко.

вы должны написать свой собственный визуализатора и свой редактор ячейки.

это образец, который я сделал за 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;
        }
}

вот поток, который может быть интересные и здесь.


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


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

посмотреть таблица визуализации документации.

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