2012-05-16 2 views
0

학교를 위해 프로그래밍 할 때 발생하는 문제에 대해 질문이 있습니다.질문 JTable의 Combobox

월요일부터 일요일까지 소규모 회사의 보스가 직원을 볼 수있는 곳과 시간대를 할당 할 수있는 곳을 요약하여 설명하고자합니다. 우리는 이것을 위해 JTable을 사용했습니다. 모든 셀에서 우리는 dayparts (오전, 오후, 저녁)와 함께 Combobox를 구현하고자합니다.

그래서 셀을 클릭하면 나타나는 콤보 상자를 클릭하고 daypart를 선택한 다음 이름을 넣을 수있게하려면 원하는 날짜를 지정하고 낮과 밤을 지정합니다 데이터베이스에 저장합니다. (지금은 변수 또는 아무것도에 넣어 우리가 데이터베이스 자신에 넣어거야, 잘 될 것입니다.) 이것은 지금까지 우리 GUI의 스크린 샷이다

: Link to our GUI

지금까지, 너무 좋아 . 우리는 GUI의 외양에 실제로 어떤 노력도 기울이지 않았으므로, 기능에 초점을 맞추면서 나에게 동참 해주십시오.). 우리의 유일한 문제는 우리가 이름과 날짜, 새로운 daypart를 데이터베이스에 넣을 수 있도록 어떤 날짜와 어떤 사람이 변경되고 있는지를 알기위한 프로그램이 필요하다는 것입니다.

우리는 이것을 시도했습니다 : 목록에서 셀을 클릭했을 때 clicklisteren을 사용했습니다. 우리는 그 방법에 몇 가지 코드를 넣었고 좌표를 볼 수 있었기 때문에 이름과 날짜를 얻을 수있었습니다. 그게 효과가 있었어. 그런 다음 우리는 콤보 박스를 구현하려고했습니다. 우리도 거기에서 성공했다. 그러나 셀이 콤보 박스가되면 click 메서드는 더 이상 사용되지 않습니다.

여기 우리의 질문입니다. 이것이 우리가 원하는 것을 얻는 적절한 방법입니까? 그렇다면 어떻게하면 이름과 날짜가 콤보 상자를 변경할 때 데이터베이스에서 찾을 수 있도록 목록을 수정할 수 있습니까? 그렇지 않다면 우리는 무엇을 바꾸어야합니까? 우리의 목표를 달성하기 위해 다른 리스너 또는 다른 코드를 사용해야합니까?

여기에 우리의 일부 코드 :

private javax.swing.table.DefaultTableModel model; //table model instantieren --teminste, straks. 
    model = new javax.swing.table.DefaultTableModel(); //Hier wordt de tabel gedefinieerd. 


    //We make the columns here: 
    model.addColumn("Naam werknemer:");          
    model.addColumn("Maandag"); 
    model.addColumn("Dinsdag"); 
    model.addColumn("Woensdag"); 
    model.addColumn("Donderdag"); 
    model.addColumn("Vrijdag"); 
    model.addColumn("Zaterdag"); 
    model.addColumn("Zondag"); 

    //We make the combobox here: 
    myCombo = new JComboBox(); 
    myCombo.addItem("-"); //not planned 
    myCombo.addItem("ochtend"); //add items 
    myCombo.addItem("middag"); 
    myCombo.addItem("avond"); 

    //This puts our combox in every cell of the first column 
    TableColumn tableColumn = jTable1.getColumnModel().getColumn(1); 


    //mouseclick listener 
    jTable1.addMouseListener(new java.awt.event.MouseAdapter() { 
     public void mouseClicked(java.awt.event.MouseEvent evt) { 
      jTable1MouseClicked(evt); 
     } 
    }); 
    //actionlisteneren bij action performed 
    myCombo.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jComboBox1ActionPerformed(evt); 
     } 
    }); 


private void jTable1MouseClicked(java.awt.event.MouseEvent evt) { 

      Point pnt = evt.getPoint(); 
      int row = jTable1.rowAtPoint(pnt);     //This is the X 
      int col = jTable1.columnAtPoint(pnt);    //this is the Y -> Date 
      String columnpje = ""+col; 
      naambijcel = ""+jTable1.getValueAt(row,0);   //This variable will hold a name 


      if (columnpje.equals("1")){ 
       datumbijcel = planningbeheermanager.getColumnArray().get(0); 
      }else if (columnpje.equals("2")){ 
       datumbijcel = planningbeheermanager.getColumnArray().get(1); 
      }else if (columnpje.equals("3")){  
       datumbijcel = planningbeheermanager.getColumnArray().get(2);  
      }else if (columnpje.equals("4")){ 
       datumbijcel = planningbeheermanager.getColumnArray().get(3); 
      }else if (columnpje.equals("5")){ 
       datumbijcel = planningbeheermanager.getColumnArray().get(4); 
      }else if (columnpje.equals("6")){ 
       datumbijcel = planningbeheermanager.getColumnArray().get(5); 
      }else if (columnpje.equals("7")){ 
       datumbijcel = planningbeheermanager.getColumnArray().get(6); 
      } 

      //System.out.println(obj1); 
      //System.out.println(row +" "+ col); 
} 

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {           
    // selectbox ding ("" zorgen ervoor dat het object in een string kan worden gezet. 
    System.out.println("Dagdeel: "+myCombo.getSelectedItem()); 
    System.out.println("Naam: "+naambijcel); 
    System.out.println("Datum: "+datumbijcel); 
    } 

당신이 우리의 코드를 더 많거나 다른 질문이 있다면, 문의 주시기 바랍니다보고 싶다면 !

+0

짐작이 말씀은 숙제이므로 전체 답변을 드릴 수는 없지만 안내해 드리겠습니다. 'JComboBox source = (JComboBox) evt.getSource();'를 사용하여 어떤 콤보 상자가 수정되었는지 알려줄 수 있습니다. – fireshadow52

+0

이것은 문제를 해결하는 데 도움이됩니다. http://adocs.oracle.com/javase/tutorial/uiswing/components/table.html#combobox – ChadNC

+0

ChadNC 링크를 이용해 주셔서 감사합니다. 그것은 우리에게 많은 도움이되었습니다! – Bas

답변

2

필자는 완전히 확신 할 수 없지만 나에게 TableModel을 제대로 사용하지 않는 것처럼 보입니다. jComboBox1ActionPerformed에서 수행하는 작업은 실제로 setValueAt()에서 수행되어야합니다.

아마도 AbstractTableModel을 확장하는 것이 DefaultTableModel보다 더 적합 할 수 있지만 전체 코드가 없으면 확신 할 수 없습니다.

+1

+1이 모델에 캡슐화되어 있습니다. 거기에 관련 예제가 [여기] (http://stackoverflow.com/a/7356518/230513). – trashgod

+0

setValueAt() 사용에 대한 제안을 해주셔서 감사합니다. 또한 관련된 예에 대한 링크에 대해 thrashgod에게 감사드립니다. – Bas