2016-02-26 32 views
0

JTable中其他單元格的值:如何增加對鼠標點擊的JTable細胞的JComboBox和基於來自同一JTable中

http://i.stack.imgur.com/LDorA.jpg

我在的NetBeans在對此我帶來價值創造的的JTable數據庫在某些列中,如圖片TESTNAME,UNITS,SPECIFICRANGE列但第二列OBSERV ED值我一直爲空用戶輸入,用戶輸入是這樣的,只要在顏色的前小區內的用戶點擊他應該在第二列的單元格得到的JComboBox我的意思是在前面的細胞上的MouseEvent的顏色和其他小區我使用editCellAt() 在爲了accompalish這個我已經寫了下面的代碼,當我在色彩的面前對細胞點擊我得到的JComboBox也時我點擊其他細胞我得到的JComboBox但我需要得到電子郵件ditCellAt()功能

我覺得DefaultCellEditor被搞定了整列,但我需要它,只有在特定的細胞上鼠標點擊

if(table.getValueAt(table.getSelectedRow(),0).toString().equals("Color")) 
{ 
    TableColumn colorColumn = table.getColumnModel().getColumn(1); 
    JComboBox comboBox = new JComboBox(); 
    comboBox.addItem("Red"); 
    comboBox.addItem("Greyish"); 
    comboBox.addItem("Yellow"); 
    colorColumn.setCellEditor(new DefaultCellEditor(comboBox)); 
}    
else 
{ 
    table.editCellAt(table.getSelectedRow(), 1); 
} 

回答

1

這裏展示瞭如何動態地返回一個例子自定義編輯器:

import java.awt.*; 
import java.util.List; 
import java.util.ArrayList; 
import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.table.*; 

public class TableComboBoxByRow extends JPanel 
{ 
    List<String[]> editorData = new ArrayList<String[]>(3); 

    public TableComboBoxByRow() 
    { 
     setLayout(new BorderLayout()); 

     // Create the editorData to be used for each row 

     editorData.add(new String[]{ "Red", "Blue", "Green" }); 
     editorData.add(new String[]{ "Circle", "Square", "Triangle" }); 
     editorData.add(new String[]{ "Apple", "Orange", "Banana" }); 

     // Create the table with default data 

     Object[][] data = 
     { 
      {"Color", "Red"}, 
      {"Shape", "Square"}, 
      {"Fruit", "Banana"}, 
      {"Plain", "Text"} 
     }; 
     String[] columnNames = {"Type","Value"}; 

     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     JTable table = new JTable(model) 
     { 
      // Determine editor to be used by row 
      public TableCellEditor getCellEditor(int row, int column) 
      { 
       int modelColumn = convertColumnIndexToModel(column); 

       if (modelColumn == 1 && row < 3) 
       { 
        JComboBox<String> comboBox1 = new JComboBox<String>(editorData.get(row)); 
        return new DefaultCellEditor(comboBox1); 
       } 
       else 
        return super.getCellEditor(row, column); 
      } 
     }; 

     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("Table Combo Box by Row"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new TableComboBoxByRow()); 
     frame.setSize(200, 200); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 

在你的情況下,你需要修改getCellEditor(...)方法返回然後基於組合框TableModel的第0列中的數據,否則返回默認編輯器。您可能還需要覆蓋到editCellAt(...)方法,以使單元格可以根據第0列中的數據進行編輯。

+0

嗨,..由於我使用了NetBeans中的JTable,所以我通過自定義代碼添加了getCellEditor()方法,但我沒有得到任何組合框還有什麼我需要編碼在if()塊我的意思是我需要如何調用重寫的getCellEditor方法 – Amaan

+0

嗨,..我試過這個我不成功,..我需要得到JComboBox鼠標事件我沒有得到我需要做到這一點。請幫忙。 – Amaan

+0

嗨,@camickr你給我的例子,當我谷歌周圍,但如何這需要實施單細胞,....我的意思是如何做到這一點鼠標事件,..... – Amaan