2014-03-19 1 views
0

콤보에서 항목을 선택할 때마다 scrollPane 테이블이 새로 고쳐지지 않습니다. 처음에이 데이터를 가지고 있지만 내가 뭔가를 선택한 후, 데이터가 성공적으로 제거되지만 새로운 데이터는Combobox에서 선택할 때 JTable이 새로 고쳐지지 않습니다.

public void ConsultFrame(String id, String name, String ic){ 
    GenerateMed("dp-000"); // to begin the scrollpane filled with Fever's medicine 
    JButton proc = new JButton("Proceed"); 
    JButton addmed = new JButton(">>"); 

    selected = new JTable(data, columnNames){ 
     @Override 
     public boolean isCellEditable(int row,int column){ 
      switch(column){    
       case 0: 
        return false; 
       case 1: 
        return false; 
      default: return true; 
      } 
    }}; 
    selectedPane = new JScrollPane(selected); 

    //Dispensary's category combobox related 
    disp = dbDisp.getDispensary(); 
    final JComboBox cBox = new JComboBox(); 
    for(int count=0; count<disp.size(); count++) 
     cBox.addItem(disp.get(count).getDSP_desc()); 
    cBox.addItemListener(new ItemListener() { 
     @Override 
     public void itemStateChanged(ItemEvent event) { 
      for(int count=0; count<disp.size(); count++){ 
       if(cBox.getSelectedItem().equals(disp.get(count).getDSP_desc())){ 
        System.out.println(disp.get(count).getDSP_ID()); 
        GenerateMed(disp.get(count).getDSP_ID()); 
        break; 
       } 
      } 
     } 
    }); 

    JTextArea tArea = new JTextArea(5, 30); 
    JScrollPane desc = new JScrollPane(tArea); 
    tArea.setLineWrap(true); 
    desc.setVerticalScrollBarPolicy (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

    JPanel info = new JPanel(); 
     info.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     info.add(new JLabel("<html>Patient's ID : " + id + "<br>Patient's Name: " + name + "<br>Patient's IC : " + ic + "<br><br>Medical Description : </html>")); 
     info.add(desc); 

    JPanel medSelect = new JPanel(); 
     medSelect.setLayout(new GridLayout(1,2)); 
     medSelect.add(scrollPane); 
     medSelect.add(selectedPane); 

    JPanel medic = new JPanel(); 
     medic.setLayout(new BorderLayout()); 
     medic.add(cBox, BorderLayout.NORTH); 
     medic.add(medSelect, BorderLayout.CENTER); 
     medic.add(proc, BorderLayout.SOUTH); 

    JPanel all = new JPanel(); 
     String timeStamp = new SimpleDateFormat("yyyy/MM/dd HH:mm").format(Calendar.getInstance().getTime()); 
     title = BorderFactory.createTitledBorder(timeStamp); 
     title.setTitleJustification(TitledBorder.RIGHT); 
     all.setBorder(title); 
     all.setLayout(new GridLayout(2,1)); 
     all.add(info); 
     all.add(medic); 

    JFrame consult = new JFrame(); 
     consult.setTitle(name + "'s consultation"); 
     consult.setResizable(false); 
     consult.setVisible(true); 
     consult.setSize(500, 460); 
     consult.setLocationRelativeTo(null); 

     consult.add(all); 
} 

에 게재되지 않는 무언가를 선택하고 내가 다시 그리기 &을 시도했습니다 나의 콤보 상자의 빨리 향하고있는 곳이다 위의 코드 라인은 새로운 스크롤 만들지 만 프레임에 스크롤을 추가하지 않습니다

public void GenerateMed(String dps_id){ 
    if (tModel != null) { 
     for (int i = tModel.getRowCount() - 1; i > -1; i--) 
      tModel.removeRow(i); 
    } 

    tModel = dbMed.getDPSMedicine(dps_id); 
    tModel.fireTableDataChanged(); 

    table = new JTable(tModel){ 
     @Override 
     public boolean isCellEditable(int row,int column){    
        return false; 
    }}; 
    table.setShowGrid(false); 
    table.setShowHorizontalLines(false); 
    table.setShowVerticalLines(false); 

    //Table customization 
    table.getTableHeader().setReorderingAllowed(false); 
    table.setRowSelectionAllowed(true); 
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    table.changeSelection(0, 0, false, false); 

    scrollPane = new JScrollPane(table); 
    scrollPane.repaint(); 
    scrollPane.revalidate(); 
} 
+0

scrollPane은 컨테이너에 추가되지 않고 윈도우가 아니기 때문에이를 프레임에 추가해야하며 새 JScrollPane 또는 새 JTable을 만들지 않아도됩니다. – nachokk

답변

1
scrollPane = new JScrollPane(table); 

을 재 검증.

그러나 새 JTable 또는 새 JScrollPane을 만들 필요가 없습니다. 모든 코드를 제거하십시오.

대신 그냥 사용하여 JTable가의 모델을 변경 :
table.setModel(dbMed.getDPSMedicine(dps_id)); 

그래서 기본적 방법은 한 줄의 코드가된다.

올바른 방법 이름을 사용하십시오. 메서드 이름은 대문자로 시작하면 안됩니다.

+0

그것은 매력처럼 작동했지만 두 가지 : i. 테이블에 열 이름을 표시하지 않습니다. ii. '테이블'에 재정의를 추가하는 방법? 처럼 . . 'code' 테이블 = 새 JTable (tModel) { @Override public boolean isCellEditable (int row, int column) { return false; }}; – Leon

+0

Aaa .. 해결됨 i. : D 나는 [link] (http://blog.danieldee.com/2009/07/showing-jtable-header-without-using.html) 방법 – Leon

+0

@ user3083413을 사용했는데, 왜 그 솔루션을 사용하겠습니까? JScrollPane에 테이블을 표시하기 만하면됩니다. 처음에는 코드가 작동한다고 했으므로 모델을 재설정하면 열 머리글이 자동으로 업데이트됩니다. – camickr