2010-11-18 27 views
3

'daki bir sütuna benzersiz JComboBox'lar nasıl eklenir JTable'da bir sütuna benzersiz JComboBoxes eklemeye çalışıyorum. BenJTable (Java)

TableColumn col = table.getColumnModel().getColumn(columnNumber); 
col.setCellEditor(new MyComboBoxEditor(values)); 

kullanarak tüm bir sütuna bir JComboBox eklemek mümkündür biliyorum ama farklı olmak için her JComboBox ihtiyaç ve içindeki farklı dizeleri var. Herhangi bir fikir?

+0

@hotveryspicy istediğiniz değişikliği netleştirmek Lütfen söyle deneyin. "Bir sonraki hücreye geçiş" ile kastedilen nedir? Değeri sonraki sütuna taşımak gibi mi? Ya da odağı bir satır aşağı hareket ettirmek mi? Ve "her hücre için birleşik kutu oluşturmak istemiyorum, her hücre için sadece bir tane ..." * Sütun başına sadece bir tane mi demek istiyorsun? – SeKa

cevap

8

getCellEditor (...) yöntemini geçersiz kılın. Örneğin;

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

public class TableComboBoxByRow extends JFrame 
{ 
    List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3); 

    public TableComboBoxByRow() 
    { 
     // Create the editors to be used for each row 

     String[] items1 = { "Red", "Blue", "Green" }; 
     JComboBox comboBox1 = new JComboBox(items1); 
     DefaultCellEditor dce1 = new DefaultCellEditor(comboBox1); 
     editors.add(dce1); 

     String[] items2 = { "Circle", "Square", "Triangle" }; 
     JComboBox comboBox2 = new JComboBox(items2); 
     DefaultCellEditor dce2 = new DefaultCellEditor(comboBox2); 
     editors.add(dce2); 

     String[] items3 = { "Apple", "Orange", "Banana" }; 
     JComboBox comboBox3 = new JComboBox(items3); 
     DefaultCellEditor dce3 = new DefaultCellEditor(comboBox3); 
     editors.add(dce3); 

     // 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) 
        return editors.get(row); 
       else 
        return super.getCellEditor(row, column); 
      } 
     }; 

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

    public static void main(String[] args) 
    { 
     TableComboBoxByRow frame = new TableComboBoxByRow(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

camickr, çözümünüz tam olarak aradığım şey gibi görünüyor. Teşekkürler!! – user446836

+0

onu sevdi teşekkürler –

0

bu deneyin:

... 
final Object[] obj = {"test1", "test2", "test3"}; 
JTable jTable = new JTable(); 
TableColumn column = jTable.getColumnModel().getColumn(1); 
column.setCellEditor(new AutoCompletionComboBoxEditor(obj)); 
... 

public static class AutoCompletionComboBoxEditor extends AbstractCellEditor implements TableCellEditor { 

     JComboBox cbx; 

     public AutoCompletionComboBoxEditor(Object[] items) { 
      cbx = new JComboBox(items); 
     } 

     public Component getTableCellEditorComponent(JTable table, 
       Object value, boolean isSelected, int row, int column) { 
      return cbx; 
     } 

     public Object getCellEditorValue() { 
      return cbx.getSelectedItem(); 
     } 
    } 

bana etkisi :)

-Saligh