2016-07-13 1 views
0

JTable 안에있는 JComboBox에서 값을 가져 오기 위해이 부분을 시도했지만 작동하지 않습니다!JTable 내부에있는 JComboBox 값의 값을 가져 오는 방법은 무엇입니까?

DB에 삽입하기 위해 선택한 셀의 값을 가져오고 싶습니다.

package fx; 

import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableColumn; 
import java.awt.*; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

public class ComboInTable extends JFrame { 
    private static JFrame jFrame; 
    public ComboInTable() throws HeadlessException { 
     jFrame=this; 
     JTable table=new JTable(); 
     DefaultTableModel model= (DefaultTableModel) table.getModel(); 
     model.addColumn("A",new Object[]{"item1"}); 
     model.addColumn("B",new Object[]{"item2"}); 
     JScrollPane scrollPane=new JScrollPane(table); 

     String[] value1=new String[]{"1","2","3"}; 
     String[] value2=new String[]{"a","b","c"}; 

     TableColumn col0=table.getColumnModel().getColumn(0); 
     TableColumn col1=table.getColumnModel().getColumn(1); 

     col0.setCellEditor(new MyComboBoxEditor(value1)); 
     col0.setCellRenderer(new MyComboBoxRenderer(value1)); 
     col1.setCellEditor(new MyComboBoxEditor(value2)); 
     col1.setCellRenderer(new MyComboBoxRenderer(value2)); 
     JComboBox comboBox=new JComboBox(value1); 
     comboBox.addItemListener(new ItemListener() { 
      @Override 
      public void itemStateChanged(ItemEvent e) { 
       if(e.getStateChange() == ItemEvent.SELECTED) 
       { 
        System.out.println(e.getItem()); 
       } 
      } 
     }); 
     jFrame.setLayout(new FlowLayout()); 
     jFrame.add(scrollPane); 
     jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     jFrame.setSize(400, 400); 
     jFrame.setVisible(true); 

    } 

    public static void main(String[] args) { 
     ComboInTable comboInTable=new ComboInTable(); 

    } 

} 

나는 MyComboBoxEditorMyComboBoxRenderer 클래스가 있습니다.

package fx; 

import javax.swing.*; 
import javax.swing.table.TableCellEditor; 
import javax.swing.table.TableCellRenderer; 
import java.awt.*; 

public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer { 
    public MyComboBoxRenderer(String[] items) { 
     super(items); 
    } 

    @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()); 

     } 
     setSelectedItem(value); 
     return this; 
    } 
} 






package fx; 

import javax.swing.*; 
import javax.swing.table.TableCellEditor; 

public class MyComboBoxEditor extends DefaultCellEditor { 
    public MyComboBoxEditor(String[] items) { 
     super(new JComboBox(items)); 
    } 

} 

답변

2

나는 JTable의의 내부하는 JComboBox의 값을 얻을 코드의이 부분을 시도했다

당신은 콤보 상자에서 값을하지 않습니다.

JTable에서 값을 얻으려면 getValueAt(...) 메서드를 사용하십시오.

사용자 정의 렌더러와 편집기를 만드는 이유도 알지 못합니다. 테이블에서 제공하는 기본 렌더러/편집기를 사용하십시오.

How to Use Tables에서 스윙 튜토리얼의 섹션을 읽어보십시오. 콤보 상자를 편집기로 사용하는 방법을 보여주는 예제를 찾을 수 있습니다.

관련 문제