[英]No content while using SWING + JUNG to refresh graph visualization
我在我的線程類中有以下java代碼:
@Override
public void run() {
JFrame window = new JFrame("Visualization POC");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
while (true) {
window.setVisible(false);
Layout<Node,Edge> layout = new CircleLayout<Node, Edge>(graph);
layout.setSize(new Dimension(300, 300));
BasicVisualizationServer<Node, Edge> vv = new BasicVisualizationServer<Node, Edge>(layout);
vv.setPreferredSize(new Dimension(350, 350));
vv.getRenderContext().setVertexFillPaintTransformer(new NodeColorTransformer());
vv.getRenderContext().setEdgeDrawPaintTransformer(new EdgeColorTransformer());
window.getContentPane().add(vv);
window.pack();
window.setVisible(true);
try {
Thread.sleep(ONE_SECOND);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我想用它來刷新圖形可視化的狀態,但我遇到了大問題。 當創建布局和設置JFrame內容的代碼塊在循環內部時,它不會顯示在輸出窗口中。 當我放在它之前,它工作正常,但它不是我想要的。 我在我的主類中通過SpringUtilities.invokeLater運行這個線程。
我可以看到窗口是刷新的,因為它閃爍了一段時間。 我期待着任何提示。
您從EDT線程調用您的代碼。 對組件的任何更新都將在EDT線程的末尾繪制。 你的線程不會退出
我修改了你的代碼很少,它工作正常。 請用你的榮格取代JLabel。
final JFrame window = new JFrame("Visualization POC");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final Random ran = new Random();
while (true) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
window.setVisible(false);
JPanel panel = new JPanel();
JLabel label = new JLabel();
int nextInt = ran.nextInt(100);
label.setText("Test Label"+String.valueOf(nextInt));
System.out.println(nextInt);
panel.add(label);
window.getContentPane().removeAll();
window.getContentPane().add(panel);
window.pack();
window.setVisible(true);
}
});
嘗試{
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.