【问题标题】:Adding Buttons inside cell of JTable along with data?在 JTable 的单元格中添加按钮以及数据?
【发布时间】:2010-01-15 05:11:10
【问题描述】:

是否可以在 JTable 单元格中添加按钮以及数据? 我要做的是创建一个表格,其中包含显示数据库中的数据(数字)的列,以及两个按钮来增加/减少同一单元格内的数字。

|ID |数量|
|06| 2 [+][-] |

类似于上面的 [+][-] 是按钮。所以当我按 [+] 时,如果按 [-],数字将变为 3 和 1。

【问题讨论】:

    标签: java swing jtable jbutton


    【解决方案1】:

    是的,这是可能的,尽管这并不容易。

    您必须编写自己的自定义cell renderer 和您自己的cell editor

    这是我用 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;
            }
    }
    

    这里有一个线程可能是interestinghere

    【讨论】:

    • 可以给这些按钮添加actionListeners吗?
    • 按钮实际上不可点击;我是否必须添加自己的 MouseListener 或类似的东西才能使它工作?
    【解决方案2】:

    正如tutorial 中所讨论的,您需要一个渲染器来显示您的值,还需要一个编辑器来检测正在编辑的单元格中的事件。在这个example 中,Component 是一个JCheckBox。请注意,这需要扩展 AbstractTableModel 的自定义 DataModel 以为给定列提供正确的 Class。 Joonas 使用JSpinner 的建议很好,效果很好。

    【讨论】:

      【解决方案3】:

      如果您想在单元格中显示除文本(或数字)以外的任何内容,我认为您需要创建一个自定义单元格渲染器。单元格渲染器的工作是绘制您需要在单元格中显示的任何内容。

      Table Renderer documentation

      因此,在这种情况下,您可以创建一个小型 JPane,其中包含文本字段和微小的 + 和 - 按钮 - 或者只是一个 JSpinner 组件,如果您需要的话。有点棘手,当然,但应该是可能的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        • 2015-02-21
        • 1970-01-01
        • 2020-10-20
        • 1970-01-01
        • 1970-01-01
        • 2014-06-27
        相关资源
        最近更新 更多