如何从jtable中的combobox获取值和选定的值?

问题描述:

在提出我的问题之前,我会尝试解释我需要做什么。我已成立了一个表,其中有几个栏显示一个下拉框如图所示:如何从jtable中的combobox获取值和选定的值?

picture http://www.freeimagehosting.net/newuploads/4ks9s.png

这应该创造的就业机会这个意义上,工作1将首先去车站的“订单” 1.如果我在车站2列上添加车站4,则它将前往车站4,依此类推。它旨在创建进一步处理的订单。所以,我想:

  • 创建表并显示呈现的组合框;
  • 如果前一列的值为“无”(从而确保它保持正确的顺序),使列(3-6)中的单元格不可编辑;
  • 不要显示已经为该行选择的工作站;

但是对于初学者来说,我无法获得从组合框中选择的值,也无法获得这些值!

继承人是我的代码到目前为止。

创建组合框:

public class SimGui extends JFrame { 
          //implements ActionListener { 
    String Stations[] = new String[] {"Station 1","Station 2","Station 3","Station 4","Station 5","None"}; 
    JComboBox stationscombo = new JComboBox(Stations); 
    Object obj = stationscombo.getSelectedItem(); 
在桌子上

鼠标点击事件:

private void jTable2MouseClicked(java.awt.event.MouseEvent evt) {          
    //Object event = evt.getSource(); 
    obj = stationscombo.getSelectedItem(); 
    System.out.println("Item: " + obj); 
    //ListSelectionModel selectionModel = jTable2.getSelectionModel(); 
    int tb1columns = jTable2.getColumnCount(); 
    int selectionrow= jTable2.getSelectedRow(); 
    int selectioncolumn = jTable2.getSelectedColumn(); 
    if (selectioncolumn > 1) { 
     for (int i=2;i<tb1columns;i++) { 
      System.out.println(jTable2.getValueAt(selectionrow,selectioncolumn)); 
      /*if (jTable2.getValueAt(selectionrow, i) != "None") { 
       stationscombo.removeItem(jTable2.getValueAt(selectionrow, i)); 
      }*/ 
     } 
    } 
    else { System.out.println(jTable2.getValueAt(selectionrow,selectioncolumn)); } 
} 

表结构:

jTable2.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] { 
     {null, null, null, null, null, null, null}, 
     {null, null, null, null, null, null, null}, 
     {null, null, null, null, null, null, null} 
    }, 
    new String [] { 
     "Job Type", "Parts", "Station 1", "Station 2", "Station 3", "Station 4", "Station 5" 
    } 
) { 
    Class[] types = new Class [] { 
     java.lang.Integer.class, java.lang.Integer.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class 
    }; 
    boolean[] canEdit = new boolean [] { 
     false, true, true, true, true, true, true 
    }; 

    public Class getColumnClass(int columnIndex) { 
     return types [columnIndex]; 
    } 

    public boolean isCellEditable(int rowIndex, int columnIndex) { 
     return canEdit [columnIndex]; 
    } 
}); 
jTable2.getTableHeader().setReorderingAllowed(false); 
for (int x = 2;x<7;x++) { 
    jTable2.getColumnModel().getColumn(x).setCellEditor(new DefaultCellEditor(stationscombo)); 
} 
jTable2.addMouseListener(new java.awt.event.MouseAdapter() { 
    public void mouseClicked(java.awt.event.MouseEvent evt) { 
     jTable2MouseClicked(evt); 
    } 
}); 

我环顾四周,试图实现一个监听器为组合框但失败。如果我在类实现ActionListener它会显示一个警告说:

SimGui is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener 

我有alreay为这是工作表中实现一个ActionListener,但我不知道这是否可能会干扰?

Action action = new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println(e.getSource()); 
     //TableCellListener tcl = (TableCellListener)e.getSource(); 
     //JComboBox cb = (JComboBox)e.getSource(); 
     //String newSelection = (String)cb.getSelectedItem(); 
     /*JComboBox cb = (JComboBox)e.getSource(); 
     String teste = (String)cb.getSelectedItem(); 
     System.out.println("Item: " + teste);*/ 
     //TableCellListener tcl1 = new TableCellListener(jTable1, action); 
     /*if (tcl.getColumn() == 3) { 
      if (tcl.getNewValue() == true) { 
       int x = tcl.getColumn(); 
       table1model.setColumnEditable(x, true); 
      } 
      else { 
       table1model.setColumnEditable(tcl.getColumn(), false); 
      } 
      /*boolean canEdit[] = { 
      false, true, true, true, true, true 
      }; 
      //System.out.println(isCellEditable(tcl1.getRow(),tcl1.getColumn())); 
     }*/ 
     /*System.out.println(newSelection); 
     System.out.println("Row : " + tcl.getRow()); 
     System.out.println("Column: " + tcl.getColumn()); 
     System.out.println("Old : " + tcl.getOldValue()); 
     System.out.println("New : " + tcl.getNewValue());*/ 
    } 
}; 

但底线,我的问题是,我怎么能正确地与表内的组合框工作,使我能得到的值设定和选择时,获得该项目的价值?

+1

为了尽快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 – 2012-07-24 02:43:40

看看TableModel.setColumnValue(row, col)

你可能还喜欢做table cell editors一些研读,以及,这将帮助你了解到底发生了什么上。