我是Java swing 的新手。我花了很多时间试图找到一种使用run()
方法将行插入JTable
的方法,但尚未找到它。所以,任何人都可以给我一个解决方案。
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class ShowTable extends JFrame {
JFrame f=new JFrame();
JTable jt=new JTable(new DefaultTableModel());
DefaultTableModel model=(DefaultTableModel)jt.getModel();
public void showdata(int count, String host, String ip, String os_name, String os_arch, String os_version, String pro_detail, String Mac_add, float disk_size, float max_memory) {
System.out.println("Row :"+count);
Object data[] = {host, ip, os_name, os_arch, os_version, pro_detail, Mac_add, disk_size, max_memory};
if (count == 0)
{
model.addColumn("HOSTNAME");
model.addColumn("IP ADDRESS");
model.addColumn("OS NAME");
model.addColumn("OS ARCHITECTURE");
model.addColumn("OS VERSION");
model.addColumn("PROCESSOR DETAIL");
model.addColumn("MAC ADDRESS");
model.addColumn("HARD DISK");
model.addColumn("RAM SIZE");
model.addRow(data);
}
else
{
model.addRow(data);
}
jt.setBounds(30,40,200,300);
jt.setFocusable(false);
jt.setRowSelectionAllowed(false);
JScrollPane sp = new JScrollPane(jt);
f.add(sp);
f.setSize(1300,100);
f.setVisible(true);
}
public static void main() {
JScrollPane jScrollPane1;
JTable jTable1;
}
}
我编写此代码,但每次run()
方法执行时才显示一个空白帧。
其他线程的修改应由swingutilities.invokelater进行:
SwingUtilities.invokeLater(() -> {
// code to be invoked in awt thread
});
工作示例下面(每秒添加新行(:
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.*;
public class ShowTable extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
startApp();
});
}
static void startApp(){
JFrame frame = new JFrame();
DefaultTableModel model = new DefaultTableModel(0, 1);
JTable table = new JTable(model);
frame.getContentPane().add(new JScrollPane(table));
frame.setSize(new Dimension(800, 600));
frame.setVisible(true);
new Thread(){
@Override
public void run() {
while(true) {
SwingUtilities.invokeLater(() -> {
model.addRow(new Object[]{"some data"});
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}