2013-11-25 3 views
0

저는 프랑스와 뉴비 인 자바입니다. "voilier"(배)의 "regates"(레이스)에 관한 프로젝트가 있습니다. 레게 트 콤보가 있으며 이것은 경주 종결 시간을 추가 할 수있는 우주선 Jtable을 만들어야합니다. 내 문제는 ... 나는 우리가 콤보의 하나 개의 항목을 클릭 할 때이 JTable을 만들고 싶어하지만 내가 할 방법을 모르는 것입니다Jcombo + Listener 사용 방법

내 코드 :

대신 EventListener를 사용
package eole; 

import java.awt.event.ItemEvent; 

public class ArrivéesVoiliers extends JFrame implements ItemListener { 

    private JPanel contentPane; 
    private JTable tableArrivées; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        ArrivéesVoiliers frame = new ArrivéesVoiliers(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public ArrivéesVoiliers() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     JComboBox combRegate = new JComboBox(); 
     combRegate.setBounds(30, 25, 90, 20); 
     contentPane.add(combRegate); 
     ArrayList<Regate> lesReg = Application.getRegates(); 

     for (Regate laReg : lesReg) { 
      combRegate.addItem(laReg.getNomReg()); 
     } 

     combRegate.addItemListener(this); 

     String nom = (String) combRegate.getSelectedItem(); 
     Regate regSelec = Application.getRegate(nom); 

     JLabel lblDateDep = new JLabel(regSelec.getDate()); 
     lblDateDep.setBounds(130, 31, 60, 14); 
     contentPane.add(lblDateDep); 

     JLabel lblHeuredepart = new JLabel(regSelec.getTime()); 
     lblHeuredepart.setBounds(200, 31, 60, 14); 
     contentPane.add(lblHeuredepart); 

     ArrayList<Voilier> voiliersPart = Application.getVoiliers(regSelec); 

     String[] entetes = { "Voiliers participants", " Classe", "Rating", 
       "Heure arrivée", "en seconde", "Abandon", "Stop Chrono", 
       "Ajout" }; 

     DefaultTableModel voilPart = new DefaultTableModel(); 
     voilPart.setColumnCount(8); 
     for (Voilier unVoil : voiliersPart) { 
      voilPart.addRow(new Object[] { unVoil.getNom(), unVoil.getNum(), 
        unVoil.getRating(), "Heure arrivée", "en seconde", 
        new Boolean(false), new Boolean(false), "Ajouter" }); 
     } 

     new AbstractTableModel() { 
      public int getColumnCount() { 
       return 0; 
      } 

      public int getRowCount() { 
       return 0; 
      } 

      public Object getValueAt(int rowIndex, int columnIndex) { 
       return null; 
      } 

      public boolean isCellEditable(int row, int col) { 
       if (col == 4) { 
        return true; 
       } else { 
        return false; 
       } 
      } 
     }; 

     tableArrivées = new JTable(voilPart); 
     tableArrivées.setBounds(50, 228, 312, -125); 
     contentPane.add(tableArrivées); 

    } 

    @Override 
    public void itemStateChanged(ItemEvent e) { 
    } 
} 
+0

누군가가 나를 도울 수있는 경우에, 그래서 정말 중요합니다 .. – Feyrisa

답변

1

다음 방법으로 itemStateChanged(ItemEvent e) 방법을 변경 : 또한

@Override 
public void itemStateChanged(ItemEvent e) { 
    if(e.getStateChange() == ItemEvent.SELECTED){ 
     voilPart.addRow(new Object[] { "col1", "col2", 
       "col3", "col4", "col5", 
       new Boolean(false), new Boolean(false), "col8" }); 
    } 
} 

내가 당신을 추천 :

1) setLayout(null); 사용하여 대신의 setBounds() 방법, LayoutManager를 사용하려고 FlowLayout에서 시작하려고 그리고 BorderLayout 정말 간단합니다.

2) 귀하의 설정 크기에 대해서는 JFrame 사용 방법 pack();

3) 나는 열 이름이 새 행을 추가하는 itemStateChanged() 방법을 사용하기위한 인스턴스 변수로 voilPart를 설정

다음

DefaultTableModel voilPart = new DefaultTableModel(new Object[][]{},entetes);

4)처럼하는 TableModel를 작성의 entetes 생각합니다.

new AbstractTableModel() { 
    public int getColumnCount() { 
     return 0; 
    } 

    public int getRowCount() { 
     return 0; 
    } 

    public Object getValueAt(int rowIndex, int columnIndex) { 
     return null; 
    } 

    public boolean isCellEditable(int row, int col) { 
     if (col == 4) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
}; 

6) 스크롤 JScrollPane에 테이블을 추가 :

5)이 중요한 코드가 아닌, 당신은 사용되지 않는 지역 변수이기 때문에, 삭제할 수 있습니다.

유용한 liks :

How to use Scroll Pane

JTable tutorial

Variables in Java