根据Swing教程:
一些Swing组件方法在API规范中标记为"线程安全"; 这些可以从任何线程安全地调用.必须从事件派发线程调用所有其他Swing组件方法.忽略此规则的程序可能在大多数情况下正常运行,但会遇到难以重现的不可预测的错误.
但是这些标记为"线程安全"的Swing组件方法是什么?实际上有吗?
是否有完整的线程安全摆动方法列表?(线程安全的Swing方法似乎很少见,所以这样的列表不能太长......)
我使用最新的Eclipse和GWT Designer来用Java创建swing应用程序.我的应用程序窗口中的主要功能(这是一个javax.swing.JFrame)在工具生成的auto中如下所示:
/* launch the application */
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
AppWindow window = new AppWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
这似乎是围绕着这可能是一个很大的噪音:
public static void main(String[] args) {
try {
AppWindow window = new AppWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经读过在某些情况下需要EventQueue.InvokeLater技术,另一个问题是在这里询问使用它的位置.
我的问题更简单; 为什么在代码生成器中会自动执行此操作?为什么main应该快速返回并让事件队列稍后创建应用程序窗口?难道不会阻止这一点吗?为什么JFrame自动生成的设计器会执行此EventQueue?我试图在启动和显示表单方面看到一些不同,无论这个代码是以更简单的方式还是更难的方式完成,我只能暂时断定这有一些好处,这些好处在初学者制作的小型演示应用程序中不可见像我一样,也许在现实世界的大型复杂Jframe类中,这种延迟/排队策略有一些好处吗?
我正在尝试制作一个GUI迷宫游戏,当计算机试图解决迷宫时,它会改变迷宫中点的颜色.迷宫由带有JPanel(GridLayout)的JFrame组成.在网格中是我需要改变颜色的JPanels.我不确定在创建它们之后如何访问它们.
我的代码:
public Maze(int length) {
JFrame frame = new JFrame();
JPanel panel = new JPanel(new GridLayout(length, length, 5,5));
panel.setPreferredSize(new Dimension(500, 500));
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
JPanel p2 = new JPanel();
p2.setBackground(Color.red);
panel.add(p2);
}
}
frame.setDefaultCloseOperation(3);
frame.setTitle("Maze Game");
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法改变p2不同方法的颜色?或者有更好的方法吗?
该程序使球从左上角到右下角滑动并起作用.但是,如果我要改变界限
frame.getContentPane().add(ball);
Run Code Online (Sandbox Code Playgroud)
从当前位置到for循环之后,为什么球不会出现在框架上.我同意球不应再移动,因为在我将球添加到JFrame之前,所有在for循环中完成的移动都会发生,但是我不明白为什么当我最终将球出现在屏幕上时将其添加到框架中.这是工作程序的代码,如果你将上面提到的行移到for循环之后,球就不再出现了
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Animate
{
private JFrame frame;
private int x,y;
public static void main(String args[])
{
Animate ballRoll = new Animate();
ballRoll.go();
}
public void go()
{
frame = new JFrame();
frame.setSize(500,500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyRoll ball = new MyRoll();
frame.getContentPane().add(ball);
for(x = 5;x<=350;x++)
{
y=x;
try
{
Thread.sleep(50);
}
catch(Exception e)
{
System.out.println("dsfsd");
}
ball.repaint();
}
}
class MyRoll extends JPanel
{
public void paintComponent(Graphics g)
{
g.setColor(Color.BLACK);
g.fillRect(0, 0, this.getWidth(), …Run Code Online (Sandbox Code Playgroud) 谁能用简单的话向我解释这段代码:
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
chatWindow.append(text);
}
});
}
Run Code Online (Sandbox Code Playgroud)
请任何人给我详细的解释。