2010-11-18 16 views
3

Ich versuche, JComboBoxes zu einer Spalte in JTable eindeutig hinzuzufügen. Ich weiß, dass es möglich ist, eine JComboBox auf eine ganze Spalte hinzuzufügenHinzufügen von eindeutigen JComboBoxes zu einer Spalte in einer JTable (Java)

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

verwenden, aber ich brauche jeden JComboBox, anders zu sein und haben unterschiedliche Strings in seinem Inneren. Irgendwelche Ideen?

+0

@hotveryspicy Bitte klären Sie Ihre gewünschte Modifikation. Was ist mit "Verschiebung zur nächsten Zelle" gemeint? Wie verschiebe den Wert in die nächste Spalte? Oder den Fokus um eine Zeile nach unten verschieben? Und was ist mit "will nicht Combo-Box für jede Zelle, nur eine ... für jede Zelle erstellen"? Meinst du nur eine pro * Spalte *? – SeKa

Antwort

8

Überschreiben Sie die Methode getCellEditor (...). Beispielsweise;

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, Ihre Lösung scheint genau das zu sein, wonach ich gesucht habe. Vielen Dank!! – user446836

+0

liebte es danke Mann –

0

Try this:

... 
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(); 
     } 
    } 

versuchen sagen Sie mir die Wirkung :)

-Saligh

Verwandte Themen