データとともに 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;
}
}
セルにテキスト (または数値) 以外のものを表示する場合は、カスタム セル レンダラーを作成する必要があると思います。セル レンダラーの仕事は、セルに表示する必要があるものをすべて描画することです。
テーブル レンダラーのドキュメントを参照してください。
したがって、この場合、テキスト フィールドと小さな + および - ボタンを含む小さな JPane を作成するか、必要に応じて JSpinner コンポーネントを作成できます。確かに少しトリッキーですが、可能なはずです。