java swing 表格相关操作
(1)设置表格数据
public static void setTableData3(JTable parameterTable_1,Map requestMap,boolean hasTextField,boolean isTF_table_cell,String[]columnNames) { System.out.println("setTableData3"); int length = requestMap.size(); if (length > 0) { Object[][] datas = new Object[length][]; int count = 0; for (Object obj : requestMap.keySet()) { Object val = requestMap.get(obj); Object[] objs = new Object[3]; RadioButtonPanel panel = new RadioButtonPanel(); panel.init(hasTextField); objs[2] = panel; Color backColor=CustomColor.getMoreLightColor(); // objs[2]="c"+i; if(isTF_table_cell){ JTextArea keyTA=new AssistPopupTextArea(String.valueOf(obj)); keyTA.setBackground(backColor); objs[0] = new JScrollPane(keyTA); }else{ objs[0] =obj; } if (ValueWidget.isNullOrEmpty(val) || val.equals("null") || val.equals("undefined")) {//配置文件中保存的是"null",而不是null val = SystemHWUtil.EMPTY; } if(isTF_table_cell){ JTextArea valTA=new GenerateJsonTextArea(String.valueOf(val)); valTA.setBackground(backColor); objs[1] = new JScrollPane(valTA); }else{ objs[1] = val; } datas[count] = objs; count++; }//for // setTableData2(parameterTable_1,datas,columnNames); appendTableData(parameterTable_1, datas, columnNames); }//if } private static void setTableData2(JTable parameterTable_1,Object[][] datas,String[]columnNames) { DefaultTableModel model = new DefaultTableModel(datas, columnNames); parameterTable_1.setModel(model); parameterTable_1.setRowHeight(30); // rendTable(); } /*** * 追加,原有输入框仍保留,所以可以使用Ctrl+Z * @param datas */ public static void appendTableData(JTable parameterTable_1,Object[][] datas,String[]columnNames){ int rowCount=parameterTable_1.getRowCount(); if(rowCount<1){//如果表格本来为空 setTableData2(parameterTable_1,datas,columnNames); }else{//表格不为空 for(int i=0;i<rowCount;i++){ setTableValueAt(parameterTable_1,i, 0, datas); setTableValueAt(parameterTable_1,i, 1, datas); } DefaultTableModel tableModel = (DefaultTableModel) parameterTable_1.getModel(); for(int i=rowCount;i<datas.length;i++){ tableModel.addRow(datas[i]); } } } /*** * 设置表格单元格的值 * @param rowIndex * @param columnIndex * @param datas */ private static void setTableValueAt(JTable parameterTable_1,int rowIndex,int columnIndex,Object[][] datas){ Object keyObj=datas[rowIndex][columnIndex]; if(keyObj instanceof JScrollPane){ JScrollPane js=(JScrollPane)keyObj; JTextComponent tf=(JTextComponent)js.getViewport().getComponent(0); keyObj = tf.getText(); } String key=null; if(keyObj instanceof String){ key=(String)keyObj; }else{ key=String.valueOf(keyObj); } Object valueAtObj=parameterTable_1.getValueAt(rowIndex, columnIndex); if(valueAtObj instanceof JScrollPane){ JScrollPane keyScrollPane=(JScrollPane)valueAtObj; JTextArea keyTA=(JTextArea)keyScrollPane.getViewport().getComponent(0); keyTA.setText(key); }else{ parameterTable_1.setValueAt(keyObj, rowIndex, columnIndex); } }
应用:
if(requestInfoBean.isRequestBodyIsJson()){//"请求参数"表格不可用 requestBodyDataTA.setText(requestInfoBean.getRequestBodyData()); }else{ TableUtil3.setTableData3(parameterTable_1,requestInfoBean.getRequestParameters(),true,true,columnNames); rendTable(); } public void layoutTable( ) { // Object[][] datas=new Object[1][2]; Object[][] datas=new Object[1][3]; for(int i=0;i<datas.length;i++){ Object[]objs=new Object[3]; RadioButtonPanel panel=new RadioButtonPanel(); panel.init(); objs[2]=panel; if(AutoTestPanel.isTF_table_cell){ objs[0]= new JScrollPane(new AssistPopupTextArea()) ; objs[1]=new JScrollPane(new GenerateJsonTextArea()); } datas[i]=objs; } TableUtil3.appendTableData(parameterTable_1,datas,columnNames); // setTableData2(datas); // repaintTable(); }
(2)清空表格数据
/*** * 清空单元格<br> * @param parameterTable_1 * @param rowIndex * @param columnIndex */ private static void cleanTableValue(JTable parameterTable_1,int rowIndex,int columnIndex){ Object valueAtObj=parameterTable_1.getValueAt(rowIndex, columnIndex); if(valueAtObj instanceof JScrollPane){ JScrollPane keyScrollPane=(JScrollPane)valueAtObj; JTextArea keyTA=(JTextArea)keyScrollPane.getViewport().getComponent(0); keyTA.setText(SystemHWUtil.EMPTY); }else{ parameterTable_1.setValueAt(null, rowIndex, columnIndex); } } /*** * 清空表格数据<br> * @param parameterTable_1 */ public static void cleanTableData(JTable parameterTable_1){ int rowCount=parameterTable_1.getRowCount(); if(rowCount>0){ for(int i=0;i<rowCount;i++){ cleanTableValue(parameterTable_1,i, 0); cleanTableValue(parameterTable_1,i, 1); } } }
应用:
JButton cleanUpTable_66 = new JButton("清空表格"); cleanUpTable_66.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { TableUtil3.cleanTableData(parameterTable_1); parameterTable_1.repaint(); } });
(3)给表格增加一行
/*** * 表格增加一行 */ public static void addParameter(JTable parameterTable_1,String key,boolean hasTextField,boolean isTF_table_cell) { System.out.println("增加一行"); DefaultTableModel tableModel = (DefaultTableModel) parameterTable_1.getModel(); RadioButtonPanel panel = new RadioButtonPanel(); panel.init(hasTextField); String val=null; if(!ValueWidget.isNullOrEmpty(key)){ if(key.contains("=")||key.contains(":")){ String[]strs=key.split("[:=]"); key=strs[0]; val=strs[1]; } } Object[] rowData =null; if(isTF_table_cell){ Color clor=CustomColor.getMoreLightColor(); JTextArea keyTA=new AssistPopupTextArea(key); keyTA.setBackground(clor); JComponent keyTA2=new JScrollPane(keyTA); JTextArea valTA=new GenerateJsonTextArea(val); valTA.setBackground(clor); JComponent valScroll=new JScrollPane(valTA); rowData =new Object[]{keyTA2, valScroll, panel}; }else{ rowData =new Object[]{key, val, panel}; } tableModel.addRow(rowData); }
应用:
/*** * 表格增加一行 */ private void addParameter(String key) { TableUtil.addParameter(this.parameterTable_1, key,true,AutoTestPanel.isTF_table_cell); } JButton addRowButton = new JButton("添加"); addRowButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addParameter(null); } });