QQSystem2目录下, 找到Main类,代码如下:public class Main { public static void main(String[] args) { // 使用SwingUtilities 确保在事件分发线程中创建UI SwingUtilities.invokeLater(() -> { LoginFrame loginFrame = new LoginFrame @Override public void onConnected() { SwingUtilities.invokeLater Override public void onConnectionError(String error) { SwingUtilities.invokeLater qqClient.connect(); } } catch (IOException e) { SwingUtilities.invokeLater
\n"); } } public class Main { public static void main(String[] args) { SwingUtilities.invokeLater 在main方法中,我们通过SwingUtilities.invokeLater()方法来创建窗体,并执行new MyForm()来打开窗口。
java.awt.event.MouseEvent; import java.awt.event.WindowEvent; import java.awt.event.WindowFocusListener; import javax.swing.SwingUtilities 计时器到期,检查鼠标是不是还在此窗体里面,不再的话,再开始隐藏 Point p = MouseInfo.getPointerInfo().getLocation(); SwingUtilities.convertPointFromScreen // 得到焦点检查鼠标是不是在窗体上 Point p = MouseInfo.getPointerInfo().getLocation(); SwingUtilities.convertPointFromScreen } } 测试: package com.xdarkness.swing.test; import javax.swing.JFrame; import javax.swing.SwingUtilities this.setMoveFrames(100);// 设置自动隐藏窗体移动的帧住,数值越大,速度越慢 } public static void main(String[] args) { SwingUtilities.invokeLater
SwingUtilities.invokeLater(() -> { // 更新GUI操作... }); 如何避免这些问题 始终调用super.paintComponent(g) 以确保画布被正确清理 遵守线程规则,使用SwingUtilities.invokeLater()或EventQueue.invokeLater()更新GUI。 通过以上介绍,你应该对Java图形绘制有了更深入的理解。
import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JComponent; import javax.swing.SwingUtilities SwingUtilities.invokeLater(new Runnable() { public void run() { //Turn off
frame.getContentPane()); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater frame.getContentPane()); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater frame.getContentPane()); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater
javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities e2.printStackTrace(); } catch (UnsupportedLookAndFeelException e2) { e2.printStackTrace(); } SwingUtilities.updateComponentTreeUI
GetInfoThread类的run方法调用SwingUtilities.invokeLater并把对进度条的引用传送给可运行对象。 与invokeLater一样,SwingUtilities.InvokeAndWait也把可运行对象排入事件派发线程的队列中。 SwingUtilities类提供了两个用于执行事件派发线程中代码的方法,这两种方法是invokeLater和invokeAndWait。 注意:可以从事件派发线程调用SwingUtilities.invokeLater,却不能从事件派发线程调用SwingUtilities.invokeAndWait。 如果从事件派发线程调用SwingUtilities.invokeAndWait,则将发生线程死锁。
javax.swing.plaf.metal.MetalLookAndFeel"; //更换观感 try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); SwingUtilities.updateComponentTreeUI
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); //刷新jf容器及其内部组件的外观 SwingUtilities.updateComponentTreeUI com.sun.java.swing.plaf.motif.MotifLookAndFeel"); break; } // 更新f窗口内顶级容器以及所有组件的UI SwingUtilities.updateComponentTreeUI (f.getContentPane()); // 更新mb菜单条及每部所有组件UI SwingUtilities.updateComponentTreeUI(mb); // 更新右键菜单及内部所有菜单项的UI SwingUtilities.updateComponentTreeUI(pop); } public static void 2.更新JFrame的风格时,调用了 SwingUtilities.updateComponentTreeUI(f.getContentPane());这是因为如果直接更新 JFrame 本身 ,将会导致
由于Swing本身非线程安全,如果你在其他线程访问和修改GUI组件,必须使用 8.1 SwingUtilities. invokeAndWait(runnable) ? 8.2 SwingUtilities. invokeLater(runnable) 使 doRun.run() 在AWT事件分法线程上异步执行。所有待处理的AWT事件被执行后,就会发生这种情况。 void run() { System.out.println("Hello World on " + Thread.currentThread()); } }; SwingUtilities.invokeLater
System.out.println("4:" + i); } } catch (Exception e) { e.printStackTrace(); } } });t3.start(); --同步 SwingUtilities.invokeAndWait
public void run() { createAndShowGUI(); } }; javax.swing.SwingUtilities.invokeLater public void run() { createAndShowGUI(); } }; javax.swing.SwingUtilities.invokeLater
public void run() { createAndShowGUI(); } }; javax.swing.SwingUtilities.invokeLater
g2d.fillPolygon(xPoints, yPoints, 10); } public static void main(String[] args) { SwingUtilities.invokeLater GUI绘制方法 (Demo4.java) 需要导入javax.swing和java.awt包 使用抗锯齿(setRenderingHint)可以使图形边缘更平滑 窗口大小会影响五角星的位置和比例 使用SwingUtilities.invokeLater
javax.swing.GroupLayout.Alignment; import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.SwingUtilities new Adjust().start(); } public static void main(String[] args) { try { SwingUtilities.invokeAndWait
; y += CUBE_SIZE; } } public static void main(String[] args) { SwingUtilities.invokeLater
SwingUtilities.invokeLater(new Runnable() { public void run() { //Turn off javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() {
pack(); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater
return "您的体重肥胖"; } } public static void main(String[] args) { SwingUtilities.invokeLater