2011-08-26 3 views
1

특별한 세포 편집기로 jComboBoxjTable 만들 내 JTable의의 세포의 DefaultCellEditor으로 JCheckBox에 사용 :나는이 기능을 사용하고

void fillTable_(){ 
     final JComboBox myEditor = new JComboBox(new String[] {"yes", "no", "maybe"}); 
     String[][] data = new String[10][2]; 
      data[0][0] = "0,0"; 
      data[0][1] = "0,1"; 
      data[1][0] = "1,0"; 
      data[1][1] = "1,1"; 
      data[2][0] = "2,0"; 
      data[2][1] = "2,1"; 
      String[] columnNames = {"Nom", "Valeur"}; 
      DefaultTableModel model = new DefaultTableModel(data, columnNames); 
      jTable1 = new JTable(model){ 
       DefaultCellEditor myCellEditor = new DefaultCellEditor(myEditor); 
       @Override 
       public TableCellEditor getCellEditor(int row, int column){ 
        int modelColumn = convertColumnIndexToModel(column); 
        int modelRow = convertRowIndexToModel(row); 
        if(modelColumn == 1 && modelRow == 1){ 
         return myCellEditor; 
        } else { 
         return super.getCellEditor(row, column); 
        } 
       } 
      }; 
    } 

을하지만 JTable는, 심지어 빈 하지 유지 일반 텍스트 디스플레이. 뭔가 잘못 됐니?

+0

TableTest

하고있다에는'Exceptions'도 적발하지 않습니다. –

+0

'jTable' v.'jTable1'은 GUI 편집기 문제 일 수 있습니다. – trashgod

답변

2

1) JTable, TableModel, JComboBox, 그때 필요하지 않습니다 부울 구성 요소에 대한 공식 튜토리얼

2)에서 example로 그 함께 넣어 만들기, 문자열, 정수, 더블을 지원하는 기본 으로 JTable가, 자신의 TableCellEditor 만들 부울, 날짜 및 Icon/ImageIcont이 포럼 here, here에서 오전 ... here, here의 테이블 셀

또 다른 예에서, 그리고 here

+0

모든 예제에서 편집기는 전체 __column__에 대해 설정되어 있지만 제 경우에는 일부 __cells__에 대해서만 jComboBox로 편집기를 변경하고 싶습니다. –

+0

"편집기를 JComboBox만으로 변경하려고합니다. _some_ 셀. " 'row' 매개 변수를 사용하여 반환 할 구성 요소를 결정할 수 있습니다. – trashgod

+0

@trashgod : 이것은 정확히 내가 한 일입니다. 나는 행과 열 모두를 지정했지만, 아무 일도 일어나지 않고, 테이블은 항상 비어있다! –

3

그러나 JTable은 비어 있습니다. 일반 텍스트조차도 표시되지 않습니다. 모두 ValueRendererValueEditor 포함이 example에 제안

당신은 당신의 편집기에 해당하는 렌더러가 필요합니다.

가 난 그냥 JTable의 일부 세포에 JComboBox을 넣어해야합니다 How to Use Tables: Concepts: Editors and Renderers에서 설명하고있는 바와 같이

, "하나의 셀 렌더링는 일반적으로 포함 된 모든 셀을 그리는 데 사용 같은 종류의 데이터. "

나는 두 행과 열을 지정,하지만 아무것도

귀하의 코드는 내가 컨테이너에 새로운 JTable를 추가 할 때 작업 표시 발생하지 않습니다.

import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.DefaultCellEditor; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableCellEditor; 

/** @see http://stackoverflow.com/questions/7200500 */ 
public class TableTest extends JPanel { 

    public TableTest() { 
     this.setPreferredSize(new Dimension(320, 240)); 
     final JComboBox myEditor = new JComboBox(
      new String[]{"yes", "no", "maybe"}); 
     String[][] data = new String[10][4]; 
     data[0][0] = "0,0"; 
     data[0][5] = "0,1"; 
     data[1][0] = "1,0"; 
     data[1][6] = "1,1"; 
     data[2][0] = "2,0"; 
     data[2][7] = "2,1"; 
     String[] columnNames = {"Nom", "Valeur"}; 
     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     JTable table = new JTable(model) { 

      DefaultCellEditor myCellEditor = new DefaultCellEditor(myEditor); 

      @Override 
      public TableCellEditor getCellEditor(int row, int column) { 
       int modelColumn = convertColumnIndexToModel(column); 
       int modelRow = convertRowIndexToModel(row); 
       if (modelColumn == 1 && modelRow == 1) { 
        return myCellEditor; 
       } else { 
        return super.getCellEditor(row, column); 
       } 
      } 
     }; 
     this.add(table); 
    } 

    private void display() { 
     JFrame f = new JFrame("TableTest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

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

      @Override 
      public void run() { 
       new TableTest().display(); 
      } 
     }); 
    } 
} 
+0

사실이 테이블은 이미'JSplitPane'에 있고,'JTree' 노드의 일부가 강조 표시 될 때 그 소유권을 보여줍니다. 일반 텍스트 디스플레이는 괜찮 았지만'CellEditor'를 추가 한 이후가 아니 었습니다. 그래서 테이블은 이미 보이기 때문에 컨테이너에 있어야합니다. –

+2

[sscce] (http://sscce.org/)가 없으므로 설명하는 효과를 재현 할 수 없습니다. 나는 위에서 정교했다. – trashgod

+0

이 함수가 작동하지 않습니다.'int modelRow = convertRowIndexToModel (row);'에서 System.out.println ("테스트 용으로 만";)을 추가했지만 아무 것도 나타나지 않습니다! –

관련 문제