【发布时间】:2014-12-25 02:56:39
【问题描述】:
我有一个JFrame,其中包含一个JXTable(来自SwingX 依赖项)和一个JButton。
单击 JButton 后,表格每次都会更新。就我而言,它仅在第一次更新。其他事件也会在按钮单击时触发(每次单击按钮时都会发生)。只有表没有被添加的新行刷新。
我正在使用DeafultTableModel 并尝试(显式触发)所有建议的方法,例如repaint、fireTableDataChanged 等。
有人可以帮忙吗?
EDIT-1(添加了代码 sn-p):-
// the actions will take place when VALIDATE button is clicked
validateButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent ae) {
if (evCheckbox1.isSelected() || !list.isSelectionEmpty()) {
try {
// store the validation errors for future use
List<List<String>> validationErrors = validateSheet(Driver.this.fileLocation, list
.getSelectedValuesList(), regulatorTypeCB.getSelectedItem().toString(), sheetTypeCB
.getSelectedItem().toString());
// creates the validation error overview to be added to roTable
Map<String, Integer> tmpMap = getValidationErrorsOverview(validationErrors);
System.out.println(tmpMap);
// create the report overview table
String[] columnNames = {"SHEET_NAME", "VALIDATION_NAME", "#"};
DefaultTableModel tmodel = new DefaultTableModel(0, 0);
tmodel.setColumnIdentifiers(columnNames);
JXTable roTable = new JXTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
roTable.addHighlighter(HighlighterFactory.createSimpleStriping());
List<String> tlist = new ArrayList<String>();
JScrollPane scrPane = new JScrollPane(roTable);
scrPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
overviewPanel.add(scrPane);
// create a list from the validation error overview map to insert as a row in table
for (Map.Entry<String, Integer> entry : tmpMap.entrySet()) {
tlist.add(entry.getKey().split(":")[0]);
tlist.add(entry.getKey().split(":")[1]);
tlist.add(String.valueOf(entry.getValue()));
}
// add rows in table
for (int i = 0; i < tmpMap.size(); i++) {
tmodel.addRow(new Object[] {tlist.get((i * 3) + 0), tlist.get((i * 3) + 1),
tlist.get((i * 3) + 2)});
}
FileUtils.writeStringToFile(logFile, "\n" + new Date().toString() + "\n", true);
roTable.setModel(tmodel);
roTable.repaint();
// frame refresh
Driver.this.frame.revalidate();
Driver.this.frame.repaint();
// open the log file in notepad.exe
ProcessBuilder pb = new ProcessBuilder("Notepad.exe", "verifier.log");
pb.start();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
【问题讨论】:
-
@dic19 在想我应该发布这么糟糕的代码:P
标签: java swing event-handling jtable swingx