根据事件委托(delegate)模型,我采用了一个处理程序类。
package simple;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonHandler implements ActionListener {
MainFrame frame;
public ButtonHandler(MainFrame frame) {
this.frame = frame;
}
@Override
public void actionPerformed(ActionEvent e) {
MyThread thread = new MyThread(frame);
Thread mthread = new Thread(thread);
mthread.start();
}
}
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,
用于框架创建的一个 MainFrame 类
package simple;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class MainFrame extends JFrame {
JButton btnStart = new JButton("Start");
int xPos1,xPos2;
public MainFrame()
{
setSize(700, 600);
setLayout(null);
setVisible(true);
xPos1=10;
xPos2=600;
btnStart.setBounds(590, 30, 100, 30);
add(btnStart);
btnStart.addActionListener(new ButtonHandler(this));
paint(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void paint(Graphics g) {
g.drawString("Seed", xPos1, 50);
g.drawString("Infotech", xPos2, 550);
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
一个实现可运行接口(interface)的线程类
package simple;
public class MyThread implements Runnable {
MainFrame frame;
public MyThread(MainFrame frame) {
super();
this.frame = frame;
}
@Override
public void run() {
while(true)
{
frame.repaint();
try {
frame.xPos1++;
frame.xPos2--;
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 一个类仅用于主方法
package simple;
public class Test {
public static void main(String[] args) {
new MainFrame();
}
}
谁能告诉我问题是什么,因为我对 java 编程概念很陌生。
最佳答案
- 重写顶级容器 (
JFrame
) 的paint
- 不调用
super.paint(g);
- 调用
paint(null)
setLayout(null)
查看 Performing Custom Painting 即可加星和 Laying out components in a container
您可能会发现 javax.swing.Timer
比使用Thread
更有用。看看Concurrency in Swing了解更多详情
关于java - 我编写了以下程序,用于在线程的帮助下用java创建动画。但它给o/p作为透明窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412144/