【发布时间】:2018-02-26 09:31:11
【问题描述】:
我是 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() 方法时它只显示一个空白框。
【问题讨论】:
-
排序答案是,不要。 Swing 不是线程安全的,您不应从事件调度线程的上下文之外对 UI 进行修改。相反,您可以使用
SwingWorker,这将允许您在 EDT 之外执行操作(并且不会阻止 UI),但它提供了一种安全更新 UI 的简化方法。 For example -
@MadProgrammer 感谢您的宝贵回答。实际上,我正在使用套接字编程制作客户端服务器应用程序。其中它们是由服务器使用多线程处理的多个客户端。所以,我必须在 JTable 中基本展示客户端的硬件级别规范
标签: java multithreading swing jframe jtable