質問

これは、データとともにJTableのセル内のボタンを追加することは可能ですか? 私は何をしようとしていることは同じセル内の数を増加/減少させるために、データベースからのデータ(番号)を表示し、列、と2つのボタンを持つテーブルを作成することです。

| 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;
        }
}

ここで興味深いここを。

他のヒント

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

私はあなたが、セル内のテキスト(または数字)よりも何かを表示したい場合は、カスタムセルレンダラーを作成する必要があると思います。セルレンダラーの仕事は、あなたがセルに表示する必要があるものは何でも描くことです。

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

何が必要ない場合、または単にするJSpinnerコンポーネント - ボタン -

この場合、テキストフィールドと小さな+とが含まれている小さなJPaneを作成することができますので。ビット確認のため、トリッキーが、可能である必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top