java swing 重绘方法,求救~~~
发布网友
发布时间:2022-05-17 08:45
我来回答
共5个回答
热心网友
时间:2023-10-15 19:28
进行界面设计的时候,有时需要设计一些特殊的按钮,如音乐播放器的原型,三角形按钮。如果Swing提供的默认按钮无法满足要求,就需要对按钮控件(JButton)进行重绘。
Swing按钮重绘的基本原理是:创建一个继承自JButton的扩展按钮类,在其中重载paintComponent方法,这个方法用来实现控件的显示界面绘制。
为了使的按钮可以响应鼠标移入、移出按钮等事件,还对它添加了鼠标*,这通过addMouseListener方法实现。
热心网友
时间:2023-10-15 19:29
repaint确实重新画了,但是并不会擦掉以前画的内容。
在重写的那个paint方法中第一行加上如下一句:
g.clearRect(0, 0, this.getWidth(), this.getHeight());
//把你之前画的内容删掉
repaint() 方法具有的功能仅仅就是 重新调用一次paint() 方法而已。
热心网友
时间:2023-10-15 19:29
把 JFrame 换成 Frame ,把画的方法放到一个 JLabel 的 paintComponent() 方法中即可
热心网友
时间:2023-10-15 19:30
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TankClient extends JFrame{
private static final long serialVersionUID = 1L;
private JPanel mainPanel;
private int x=50,y=50;
@Override
public void paint(Graphics g) {
super.paint(g); //背景色
Color c = g.getColor();
g.setColor(Color.red);
g.clearRect(0, 0, this.getWidth(), this.getHeight());
g.fillOval(x, y, 30, 30);
g.setColor(c);
y += 5;
}
public TankClient(){
lauchFrame();
}
public void lauchFrame(){
mainPanel = new JPanel();
mainPanel.setBackground(Color.green);
this.getContentPane().add(mainPanel);
this.setBounds(300,100,800,600);
this.setBackground(Color.BLUE);
this.setVisible(true);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
new Thread(new PaintThread()).start();
}
public static void main(String[] args) {
new TankClient();
}
/**
* 创建一个Tread每隔相同时间进行重画,从而改变坦克位置
* @author Administrator
*/
private class PaintThread implements Runnable{
public void run() {
while(true){
repaint();//重画组件
try {
Thread.sleep(1000);//睡100ms
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
热心网友
时间:2023-10-15 19:30
public void paint(Graphics g) {
super.paint(g); //加上这句
Color c = g.getColor();
g.setColor(Color.red);
g.fillOval(x, y, 30, 30);
g.setColor(c);
y += 5;
}