2010-11-18 8 views
3

JTable의 열에 고유 한 JComboBoxes을 추가하려고합니다. 나는JTable (Java)의 열에 고유 JComboBox를 추가하는 방법

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

사용하여 열 전체에 JComboBox를 추가 할 수 있습니다 알고 있지만 나는 다르게 각 JComboBox이 필요하고 그 안에 다른 문자열이있다. 어떤 아이디어?

+0

@hotveryspicy가 원하는 수정을 명확히하십시오 말해보십시오. "다음 셀로 이동"이란 의미는 무엇입니까? 값을 다음 열로 이동하는 것과 마찬가지로? 또는 한 줄 아래로 포커스를 이동 하시겠습니까? 그리고 "각 셀에 대해 콤보 상자를 만들고 싶지 않고, 각 셀에 대해 하나의 콤보 상자를 만들고 싶지 않습니까? * 열 * 당 하나만 의미합니까? – SeKa

답변

8

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

camickr, 귀하의 솔루션은 제가 찾고있는 것 같습니다. 감사!! – user446836

+0

감사합니다. –

0

이 시도 :

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

이 나에게 미치는 영향 :

-Saligh

관련 문제