2013-03-31 3 views
0

Я не знаю, как это сделать, чтобы установить jcombobox в определенную строку ... на данный момент у меня есть jcombobox для всех строк, но я хочу его только в одном ряд:Celleditor (JComboBox) в определенной строке JTable

JComboBox cc = new JComboBox(); 
cc.addItem(jComboBox5.getSelectedItem()+"/"+jComboBox6.getSelectedItem()+"/"+jComboBox7.getSelectedItem()+" "+jComboBox1.getSelectedItem()+"."+jComboBox2.getSelectedItem()); 
jTable1.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(cc)); 
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); 
    renderer.setToolTipText("CLICCA PER LE DATE"); 
jTable1.getColumnModel().getColumn(3).setCellRenderer(renderer); 

ответ

2

Update: Как я тестировал мой (возможно, неполный) ответ, я наткнулся на очень хороший С.О. Вопрос, который я думаю, поможет гораздо лучше, чем я мог бы: Putting JComboBox into JTable

Другое обновление: Я снова прочитал ваш вопрос, и я понял, что вы попросили конкретный ряд. Единственный способ, которым я могу думать делать это, чтобы создать пользовательский CellEditor, что-то вроде:

private static class MyCellEditor extends AbstractCellEditor implements TableCellEditor { 

    DefaultCellEditor other = new DefaultCellEditor(new JTextField()); 
    DefaultCellEditor checkbox = new DefaultCellEditor(new JComboBox(new Object[] {"abc"})); 

    private DefaultCellEditor lastSelected; 

    @Override 
    public Object getCellEditorValue() { 

     return lastSelected.getCellEditorValue(); 
    } 

    @Override 
    public Component getTableCellEditorComponent(JTable table, 
      Object value, boolean isSelected, int row, int column) { 
     if(row == 0) { 
      lastSelected = checkbox; 
      return checkbox.getTableCellEditorComponent(table, value, isSelected, row, column); 
     } 
     lastSelected = other; 
     return other.getTableCellEditorComponent(table, value, isSelected, row, column); 
    } 

} 

В этом примере, обычай CellEditor на самом деле два редактора, и в зависимости от выбираемой строки, конкретный редактор получит вызов (как образно, так и буквально). Я признаю, что lastSelected казался немного hokey, но я честно не мог найти более простой способ узнать, какое значение редактора нужно вернуть (поскольку getCellEditorValue не имеет аргументов).

Чтобы сделать ваш стол «правильным», вам, вероятно, придется что-то делать с Renderer (потому что Renderer может или не может знать, чтобы показать выбранное значение JComboBox в качестве начального значения). Это зависит от того, как вы инициализируете данные в фактической таблице.


Для полноты мой первоначальный ответ ниже:

Вы можете добавить компонент JComboBox к ряду с использованием addRow на TableModel, как показано здесь: How to add row in JTable?

Смотрите также: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

Я думаю, что основная проблема заключается в том, что вы смешиваете идею редакторов столбцов/R enderers с фактическими данными, которые будут храниться в каждой строке.

5

, но я хочу только одну строку:

Override метод getCellEditor (...), чтобы вернуть конкретный редактор для данной строки:

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); 
    } 
} 
+2

этот код может быть помещенный в официальный учебник Оракула, – mKorbel

Смежные вопросы