2013-08-20 44 views
-1

我创建JTable中按如下无法访问的JTable:的Java Swing - 从不同的功能

public void refTable(String jobNo) { 
     Report rp = new Report(); 
     final String noJob = jobNo;  
     Map<Integer, String> jMap = rp.getReportInfo(jobNo); 
     Map<Integer, String> sortedMap = new TreeMap<Integer, String>(jMap);  
     String[] row = new String[sortedMap.size()]; 
     Integer[] no = new Integer[sortedMap.size()]; 
     String[] stat = new String[sortedMap.size()]; 
     Boolean[] dev = new Boolean[sortedMap.size()]; 
     String[] remark = new String[sortedMap.size()]; 
     Boolean[] rem = new Boolean[sortedMap.size()]; 
     String userRemark[] = new String[sortedMap.size()]; 
     tabSize = sortedMap.size(); 
     int i = 0; 

     for (Integer key : sortedMap.keySet()) { 
      no[i] = key; 
      String []val = sortedMap.get(key).split("###"); 
      if (val[0].trim().equals("DEV")) { 
       stat[i] = "FAIL"; 
      } else { 
       stat[i] = val[0].trim(); 
      } 

      String []strRemark = val[1].split("No"); 
      //tempRemark = strRemark[0]; 
      RemarkDropDownList.devTempValue =val[1].split("No"); 

      row[i] = strRemark[0].trim().replaceAll("Yes", "");// 
      //row[i] = val[1].trim(); 
      if(strRemark.length<2) 
      dev[i] = false; 
      else 
      dev[i] = true;  
      remark[i] = ""; 
      if(strRemark.length<2) 
      userRemark[i] = ""; 
      else 
       if(RemarkDropDownList.userOthersReamrk!=null) 
      userRemark[i] = RemarkDropDownList.userSelectedItem; 
      else 
       userRemark[i] = strRemark[1];  
      //remark[i] = false; 
      /*if(userRemark1[i]!=null) 
      userRemark[i] = userRemark1[i];//RemarkDropDownList.userOthersReamrk; 
      else 
      userRemark[i] =""; Use when drop down*/ 
      rem[i] = false; 
      i++; 
     } 

     DefaultTableModel model = new DefaultTableModel(); 
     model.fireTableDataChanged(); 
     jTable1.setModel(model);  
     model.addColumn("No:", no); 
     model.addColumn("Status:", stat); 
     model.addColumn("Details:", row); 
     model.addColumn("Non-Deviation", dev); 
     model.addColumn("Remarks", remark); 
     model.addColumn("Remove", rem); 
     model.addColumn("UR", testRemark); 

     TableColumn col1 = jTable1.getColumnModel().getColumn(0); 
     col1.setPreferredWidth(30); 

     TableColumn col2 = jTable1.getColumnModel().getColumn(1); 
     col2.setPreferredWidth(30); 

     TableColumn col3 = jTable1.getColumnModel().getColumn(2); 
     TextRenderer renderer = new TextRenderer(); 
     col3.setCellRenderer(renderer); 
     col3.setPreferredWidth(350); 

     CellRenderer cellRender = new CellRenderer(); 
     TableColumn col4 = jTable1.getColumnModel().getColumn(3); 
     col4.setCellEditor(jTable1.getDefaultEditor(Boolean.class)); 
     col4.setCellRenderer(cellRender); 
     col4.setPreferredWidth(50); 

     TableButton buttonEditor = new TableButton("Button"); 
     buttonEditor.addTableButtonListener(new TableButtonListener() { 
      //@Override 
      public void tableButtonClicked(int row, int col) { 
       RemarkDropDownList rmk = new RemarkDropDownList(noJob, row); 
      } 
     }); 
     TableColumn col5 = jTable1.getColumnModel().getColumn(4); 
     col5.setCellRenderer(buttonEditor); 
     col5.setCellEditor(buttonEditor); 
     TableColumn col6 = jTable1.getColumnModel().getColumn(5); 
     col6.setCellEditor(jTable1.getDefaultEditor(Boolean.class)); 
     col6.setCellRenderer(jTable1.getDefaultRenderer(Boolean.class)); 
     col6.setPreferredWidth(50); 
     jTable1.setShowGrid(true); 
     jTable1.setGridColor(Color.BLACK); 
     jTable1.setAutoCreateRowSorter(true); 
     } 

我试图在这样的同一类不同的功能明确的JTable。

public void clear() 
{ 
jTable1.setModel(new DefaultTableModel()); 
} 

jTable未按预期清除。当我尝试将jTable1.setModel(new DefaultTableModel());移动到主函数refTable()时,jTable被清除。为了补充,我不仅能够清除jTable,它看起来像我根本无法访问jTable。请咨询。

+0

@Nizil这个(和每一个)通知器在DefaultTableModel中正确实现 – mKorbel

+0

你是否在从EDT调用你的清除方法?另外为什么不重复使用您创建的模型? – stryba

+1

-1仍然没有显示SSCCE ...没有,你的问题根本不应该承担 – kleopatra

回答

1

这将清除你的桌子。首先必须创建新的默认的表模型,然后将其设置,最后设置的行数为0

public void clear(){ 

DefaultTableModel tm=new DefaultTableModel(); 
jTable1.setModel(tm); 
tm.setRowCount(0); 
} 

希望这有助于。

+0

nope..not helps ..你看起来像我不能做任何改变Jtable –

+0

@ chinna_82很好的方向+1,但没有人知道你的代码发布在这里 – mKorbel

+0

我认为你是在一个方法内创建jTable1?你有可能首先将jTable制作成一个变量,然后在refTable方法中调用它?这样,您可以引用jTable变量并对其进行更改。我的意思是为例如。一个'private jTable table = new jTable();'然后在方法'refTable'中使用'table'变量以及其他需要调用'table'的方法。 – ghoulfolk