I';我在读《头先Java》,但我对这个程序感到困惑 import javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 公共类两个按钮 { int x=70; int y=70; 公共静态void main(字符串参数[]) { twobuttons gui=新twobuttons(); gui.go(); } 公开作废go() { JFrame=新JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mydraw drawpanel=新建mydraw(); frame.getContentPane().add(drawpanel); 框架。设置尺寸(300300); frame.setVisible(true); 对于(int i=0;i
您在绘画类(paintconponent=>paintComponent)中有一个输入错误。因此您没有重写JComponent超类的行为。请尝试以下操作:I';我在读《头先Java》,但我对这个程序感到困惑 import javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 公共类两个按钮 { int x=70; int y=70; 公共静态void main(字符串参数[]) { twobuttons gui=新twobuttons(); gui.go(); } 公开作废go() { JFrame=新JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mydraw drawpanel=新建mydraw(); frame.getContentPane().add(drawpanel); 框架。设置尺寸(300300); frame.setVisible(true); 对于(int i=0;i,java,swing,Java,Swing,您在绘画类(paintconponent=>paintComponent)中有一个输入错误。因此您没有重写JComponent超类的行为。请尝试以下操作: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class twobuttons { int x=70; int y=70; public static void main(String args[]) {
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class twobuttons
{
int x=70;
int y=70;
public static void main(String args[])
{
twobuttons gui =new twobuttons();
gui.go();
}
public void go()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mydraw drawpanel = new mydraw();
frame.getContentPane().add(drawpanel);
frame.setSize(300,300);
frame.setVisible(true);
for(int i=0;i<130;i++)
{
x++;
y++;
drawpanel.repaint();
try
{
Thread.sleep(50);
}
catch(Exception ex)
{
}
}
}
class mydraw extends JPanel
{
public void paintconponent(Graphics g)
{
g.setColor(Color.green);
g.fillOval(x, y, 40, 40);
}
}
}
如果这个片段是从书上粘贴下来的,我会把书扔掉
- Swing操作应该发生在EDT上,因此
方法需要main
(或类似)EventQueue.invokeLater
- 在执行绘制的同一
线程上调用
,将无法工作Thread.sleep
线程的问题。sleep
在EDT上不起作用,以及可能的解决方法。在这种情况下,我将使用Swing计时器来移动点并触发重新绘制1)从不使用线程。在EDT期间,此代码行导致Swing GUI闪烁或冻结,例如关于冻结
2) Swing GUI应在中启动
3) 使用r进行Swing GUI的动画或暂停
4) 学习我必须承认懒惰和粗心害死了我!真正的书很受尊敬,而且看起来更好。@trashgood,看起来确实更好。我自己从来没有读过这本书,所以我的评论只是基于问题中的片段
class mydraw extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
g.setColor(Color.green);
g.fillOval(x, y, 40, 40);
}
}