9

データとともに JTable セル内にボタンを追加することは可能ですか? 私がやろうとしているのは、データベースからのデータ (数値) を表示する列と、同じセル内の数値を増減する 2 つのボタンを含むテーブルを作成することです。

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

上記のように [+][-] がボタンになります。[+] を押すと数字が 3 に変わり、[-] を押すと 1 になります。

4

3 に答える 3

15

はい、可能ですが、簡単ではありません。

独自のカスタムセル レンダラーと独自のセル エディターを作成する必要があります。

これは私が 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;
        }
}

ここに面白いかもしれないスレッドとここがあります。

于 2010-01-15T06:15:13.930 に答える
1

チュートリアルで説明したように、値を表示するためのレンダラーと、編集中のセルからのイベントを検出するためのエディターの両方が必要です。このでは、 ComponentJCheckBoxです。これには、特定の列に正しいものを提供するためにDataModel拡張するカスタムが必要であることに注意してください。Joonas の使用する提案は、うまく機能する優れたものです。AbstractTableModelClassJSpinner

于 2010-01-15T06:11:21.237 に答える
1

セルにテキスト (または数値) 以外のものを表示する場合は、カスタム セル レンダラーを作成する必要があると思います。セル レンダラーの仕事は、セルに表示する必要があるものをすべて描画することです。

テーブル レンダラーのドキュメントを参照してください。

したがって、この場合、テキスト フィールドと小さな + および - ボタンを含む小さな JPane を作成するか、必要に応じて JSpinner コンポーネントを作成できます。確かに少しトリッキーですが、可能なはずです。

于 2010-01-15T05:25:41.037 に答える