13

重複の可能性:
JComboBox を JTable セルに追加する方法は?

JComboBoxのセルの 1 つに追加するのが難しいと感じてJTableいます。以下のコードを試しましたが、機能しません。

jcombobox を特定のセルに追加するにはどうすればよいですか?

enter新しいを押すjcomboboxと、目的の列に自動的に追加されます。

jTable1 = new javax.swing.JTable();
mod=new DefaultTableModel();
mod.addColumn("No");
mod.addColumn("Item ID");
mod.addColumn("Units");
mod.addColumn("Amount");
mod.addColumn("UOM");
mod.addColumn("Delivery Date");
mod.addColumn("Total Amount");
mod.addColumn("Notes");
mod.addColumn("Received");
mod.addRow(new Object [][] {
        {1, null, null, null, null, null, null, null, null}
    });
jTable1.setModel(mod);
jTable1.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(generateBox()));
jTable1.setColumnSelectionAllowed(true);


Code to generate ComboBox

private JComboBox generateBox()
 {
     JComboBox bx=null;
     Connection con=CPool.getConnection();
     try
     {
         Statement st=con.createStatement();
         String query="select distinct inid from inventory where company_code="+"'"+ims.MainWindow.cc+"'";
         ResultSet rs=st.executeQuery(query);
         bx=new JComboBox();
         while(rs.next()){
             bx.addItem(rs.getString(1));
         }
         CPool.closeConnection(con);
         CPool.closeStatement(st);
         CPool.closeResultSet(rs);
     }catch(Exception x)
     {
         System.out.println(x.getMessage());
     }
             return bx;

 }
4

2 に答える 2

9

JComboBoxJTableDefaultCellEditor を拡張することによって追加されます

例:

TableColumn comboCol1 = table.getColumnModel().getColumn(0);
comboCol1.setCellEditor(new CustomComboBoxEditor());

/**
   Custom class for adding elements in the JComboBox.
*/
public class CustomComboBoxEditor extends DefaultCellEditor {

  // Declare a model that is used for adding the elements to the `Combo box`
  private DefaultComboBoxModel model;

  public CustomComboBoxEditor() {
      super(new JComboBox());
      this.model = (DefaultComboBoxModel)((JComboBox)getComponent()).getModel();
  }

  @Override
  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
      // Add the elements which you want to the model.
      // Here I am adding elements from the orderList(say) which you can pass via constructor to this class.
      model.addElement(orderList.get(i));

      //finally return the component.
      return super.getTableCellEditorComponent(table, value, isSelected, row, column);
  } 
}

カスタム クラスを使用して JTable でコンポーネントを作成することにより、表示するコンテンツをより詳細に制御できます。

于 2013-01-16T10:11:27.077 に答える