2013-07-31 4 views
0

콤보 상자를 만들고 내 테이블 열을 추가하려고합니다. 나는이 example을 사용합니다. 내가하려고하면 col5.setCellRenderer(cmbRender); 던져 :ComboBoxRenderer를 TableCellRenderer로 변환 할 수 없습니다.

"ComboBoxRenderer는 TableCellRenderer"로 변환 할 수 없습니다.

ComboxRenderer는

class ComboBoxRenderer extends JLabel 
          implements ListCellRenderer { 
     private Font uhOhFont; 

     public ComboBoxRenderer() { 
      setOpaque(true); 
      setHorizontalAlignment(CENTER); 
      setVerticalAlignment(CENTER); 
     } 
     public Component getListCellRendererComponent(
              JList list, 
              Object value, 
              int index, 
              boolean isSelected, 
              boolean cellHasFocus) { 

      int selectedIndex = ((Integer)value).intValue(); 

      if (isSelected) { 
       setBackground(list.getSelectionBackground()); 
       setForeground(list.getSelectionForeground()); 
      } else { 
       setBackground(list.getBackground()); 
       setForeground(list.getForeground()); 
      } 
      String[] petStrings = {"Bird", "Cat", "Dog", "Rabbit", "Pig"}; 
      String pet = petStrings[selectedIndex]; 
      setUhOhText(pet + " (no image available)", 
      list.getFont());   
      return this; 
     } 
     protected void setUhOhText(String uhOhText, Font normalFont) { 
      if (uhOhFont == null) { //lazily create this font 
       uhOhFont = normalFont.deriveFont(Font.ITALIC); 
      } 
      setFont(uhOhFont); 
      setText(uhOhText); 
     } 
    } 

나는 내가 petString에 할당 된 값으로 내 테이블 열에서 만들려는이

  ComboBoxRenderer cmbRender = new ComboBoxRenderer(); 
     TableColumn col5 = jTable1.getColumnModel().getColumn(4); 
     col5.setCellRenderer(cmbRender);// give me error here 

처럼 호출하려고합니다. 제발 조언. 내가 텍스트 상자에 대한

TextRenderer2 renderer2 = new TextRenderer2(); 
TableColumn col5 = jTable1.getColumnModel().getColumn(4); 
MyTableCellEditor editor = new MyTableCellEditor(); 
col5.setCellEditor(editor); 
col5.setCellRenderer(renderer2); 
col5.setPreferredWidth(100); 

있는 TextRenderer

class TextRenderer2 extends JLabel implements TableCellRenderer { 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
     { 
      JPanel jp_panel = new JPanel(); 

      JTextPane jta_text = new JTextPane(); 
      JScrollPane jsp_scroll = null; 

      String valStr = value.toString(); 
      jta_text.setText(valStr); 

      jp_panel.setLayout(new BorderLayout()); 
      jsp_scroll = new JScrollPane(jta_text); 
      jp_panel.add(jsp_scroll, BorderLayout.CENTER); 

      return jp_panel; 
     } 
    } 
+0

하시기 바랍니다 뭐죠 목표 만 표 셀 쇼 JComboBox에에 Renderer로서, JComboBox를 디코드했습니다. ... – mKorbel

+0

@mKorbel i didnt g 너. 내 테이블 열에 드롭 다운을 만들고 싶습니다. 테스트를 위해서 나는 단지 드롭 다운에서 보여주는 petString을 사용한다. –

+0

당신이 렌더러 컨셉을 이해하고, 렌더러가 페인팅 만하는 것은 아니길 바랄뿐입니다. ListCellRenderer는 JList 용이고 JComboBox 용 JComboBox는 거기에 있습니다. XxxTableCellRenderer/prepareRenderer, 다시 whats 목표, Question 내 테이블 열에 드롭 다운을 생성하고 싶습니다. == TableCellEditor 또는 아닙니다 – mKorbel

답변

0

변화를 어떻게

이입니다 구현하는 TableCellRenderer에 구현의 ListCellRenderer

class ComboBoxRenderer extends JComboBox implements TableCellRenderer { 

     public ComboBoxRenderer(Object[] items) { 
     super(items); 
    } 

    private static final long serialVersionUID = 1L; 



    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
     if (isSelected) { 
      setForeground(table.getSelectionForeground()); 
      super.setBackground(table.getSelectionBackground()); 
     } else { 
      setForeground(table.getForeground()); 
      setBackground(table.getBackground()); 
     } 
     // Select the current value 
     setSelectedItem(value); 
     return this; 
    } 
    } 
+0

당신은 둘 다 할 수 있습니다 :'ComboBoxRenderer implements ListCellRenderer, TableCellRenderer' :-) – kleopatra

+0

이 표시됩니다. 감사. :) –