我已經設置JTable
與分頁 - 這工作得很好,但我有更新數據到表的問題。 table.repaint()不起作用。這是我正在使用的代碼。提前致謝!Jtable/JScrollPanel不會刷新(更新數據)
String[][] data = new String[100][4];
String[] columnNames = new String[]{
"IP", "PC_NAME", "ttl", "db"};
構造:
gui(){
JTable table = new JTable(data, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
JButton next = new JButton("next");
JButton prev = new JButton("prev");
next.addActionListener(this);
prev.addActionListener(this);
JPanel panel = new JPanel(new BorderLayout());
JPanel buttonPanel = new JPanel();
buttonPanel.add(prev);
buttonPanel.add(next);
panel.add(buttonPanel, BorderLayout.SOUTH);
panel.add(table.getTableHeader(), BorderLayout.PAGE_START);
panel.add(scrollPane, BorderLayout.CENTER);
getContentPane().add(panel);}
的ActionListener:
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "next") {
Rectangle rect = scrollPane.getVisibleRect();
JScrollBar bar = scrollPane.getVerticalScrollBar();
int blockIncr = scrollPane.getViewport().getViewRect().height;
bar.setValue(bar.getValue() + blockIncr);
scrollPane.scrollRectToVisible(rect);
}
if (e.getActionCommand() == "prev") {
Rectangle rect = scrollPane.getVisibleRect();
JScrollBar bar = scrollPane.getVerticalScrollBar();
int blockIncr = scrollPane.getViewport().getViewRect().height;
bar.setValue(bar.getValue() - blockIncr);
scrollPane.scrollRectToVisible(rect);
}}
下面是一個數據存儲到一個數組的函數:
int i=0;
public void WriteMonitorData (String IP, String PC_NAME, String ttl, String gw)
{
data[i][0]=IP;
data[i][1]=PC_NAME;
data[i][2]=ttl;
data[i][3]=gw;
i++;
table.repaint();
scrollPane.repaint();
}
編輯1:
我用DefaultTableModel試過,仍然沒有運氣。這是我用來更新表的代碼。 構造函數代碼沒有改變。 聲明:
private static final long serialVersionUID = 1L;
String[][] data = new String[100][4];
String[] columnNames = new String[]{
"IP", "PC_NAME", "ttl", "db"};
DefaultTableModel model = new DefaultTableModel(data,columnNames);
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
這裏是功能更新表:
public void WriteMonitorData (String IP, String PC_NAME, String ttl, String gw)
{
System.out.println(IP);
model.setValueAt(IP, i, 0);
model.setValueAt(PC_NAME, i, 1);
model.setValueAt(ttl, i, 2);
model.setValueAt(gw, i, 3);
i++;
model.fireTableDataChanged();
table.repaint();
scrollPane.repaint();
}
請清理你的代碼縮進。同一塊上的所有代碼應該統一縮進(我自己喜歡3個空格)。如果你不這樣做,那麼你就比讓志願者審查和理解你的代碼更加困難,這對我們來說確實不公平。 –
也請花一點時間,並描述你的問題的細節。我們當然不能運行這個代碼片段,所以如果你沒有發佈可編譯代碼,你需要給我們足夠的信息,以便我們能夠合理猜測問題的根源。這將需要**你**提供的信息。 –
我有其他類調用函數WriteMonitorData並傳遞4個字符串。當函數WriteMonitorData被調用時,我將傳遞的字符串存儲到包含表的數據的變量數據中。問題是表數據不刷新。我成功地將傳遞的字符串存儲到變量數據中,但由於某些原因,表格行是空的 – ZhiZha