2012-02-17 23 views
3

jtableにボタンを追加するためのチュートリアルを検索しました。http://tips4java.wordpress.com/2009/07/12/table-button-column/ボタンのラベルを設定する場所は?jtableにボタンを追加する

 [code] 
    private void createTable(){ 
     model = new DefaultTableModel(); 
     editorTable.setModel(model); 
     model.addColumn("COL1"); 
     model.addColumn("COL2"); 
     model.addColumn("ADD"); 
     model.addColumn("DELETE"); 
     model.addRow(new Object[]{"DATA1", "DATA2"}); 

     Action delete = new AbstractAction() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      editorTable = (JTable) e.getSource(); 
      int modelRow = Integer.valueOf(e.getActionCommand()); 
      ((DefaultTableModel) editorTable.getModel()).removeRow(modelRow); 
     } 
    }; 

     ButtonColumn bc = new ButtonColumn(editorTable, delete, 3); 
     bc.setMnemonic(KeyEvent.VK_D); 
    } 

    [/code] 
+0

ここで見てみましょう:http://stackoverflow.com/questions/1475543/how-to-add-button-in-a-row-of-jtable-in-swing-をJava – MByD

+0

JTableのoracle javaチュートリアルをチェックしましたか?レンダラーとエディタがチェックされています – asela38

+0

Binyamin、応答ありがとう、私はクラスを実装しました。それは正常に動作していますが、私はボタンのラベルを追加する場所を見つけるつもりはありません。 – FirmView

答えて

4

それはあなたのDefaultTableModelのデータからテーブルレンダラとエディタで自動的に設定されています。例えば、テーブルエディタのために、コードは次のとおりです。valueは、あなたのテーブルモデルからの値である

public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column) { 
    ... 
    editButton.setText(value.toString()); 
    editButton.setIcon(null); 
    ... 
} 

。詳細はButtonColumn.javaを参照してください。

EDIT:あなたは4列を追加しているので、あなたはおそらく第四列の削除ボタンを見るために

model.addRow(new Object[]{"DATA1", "DATA2", "DATA3", "DELETE"}); 

にあなたの行データを変更する必要があります。

+0

ありがとう、カカ、私はコードを見た、それはeditorValueです。ラベルの名前をDELETEにしたい場合、どこに変更を加える必要がありますか? – FirmView

+1

+1ブログのエントリを理解する:)ブログは 'あなたは、テキスト(またはアイコン)をTableModelに格納し、ButtonColumnはボタン上のテキスト(またはアイコン)をレンダリングします。そのため、モデルに他のテキスト文字列を追加するのと同じ方法で、TableModelにテキスト文字列を追加します。レンダリングのみが異なります。 – camickr

+0

私はそれを得た。ありがとう – FirmView

-1
MyClass myClass = new MyClass(); 
    jTable1.getColumnModel().getColumn(0).setCellEditor(myClass); 
    jTable1.getColumnModel().getColumn(0).setCellRenderer(myClass); 
class MyClass extends AbstractCellEditor implements TableCellEditor, TableCellRenderer 
{ 

    @Override 
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) 
    { 
    JPanel panel=(JPanel)jTable1.getCellRenderer(row, column).getTableCellRendererComponent(table, value, isSelected, isSelected, row, column); 
    panel.setBackground(table.getSelectionBackground());  
    return panel; 
    } 

    @Override 
    public Object getCellEditorValue() 
    { 
     return null; 
    } 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     AbstractAction action = new AbstractAction() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       JOptionPane.showMessageDialog(rootPane,"Row :"+jTable1.getSelectedRow()+" "+ e.getActionCommand() + " clicked"); 
      } 
     }; 
     JButton button1 = new JButton(action); 
     JButton button2 = new JButton(action); 
     button1.setText("Button1"); 
     button2.setText("Button2"); 

     JPanel panel = new JPanel(); 
     panel.add(button1); 
     panel.add(button2); 
     panel.setBackground(table.getBackground()); 
     return panel; 
    } 
} 

}

+0

複数の問題、f.i. a)cellEditorの無効な実装:終了時にリスナーに通知する必要があるb)常に新しいコンポーネントを作成するc)デフォルトのレンダラーがJPanel型であると仮定d)... – kleopatra

関連する問題