我正在尝试学习如何绘制形状,并能够a)绘制它,“冻结”过程,用背景颜色绘制它,然后以原始颜色重新绘制它b)画出一个形状并改变它的颜色。到目前为止我所有的(闪烁):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Carlight extends JPanel{
Thread th=new Thread();
public void paintComponent (Graphics g){
super.paintComponents(g);
g.setColor(Color.yellow);
g.fillOval(25, 25, 10, 10);
try{
th.sleep(10);
}catch(InterruptedException e){}
repaint();
g.setColor(Color.yellow);
g.fillOval(25, 25, 10, 10);
try{
th.sleep(10);
}catch(InterruptedException e){}
repaint();
g.setColor(Color.yellow);
g.fillOval(25, 25, 10, 10);
}
public Carlight(){
JFrame frame=new JFrame();
frame.setTitle("Carlights");
frame.add(this);
frame.setBackground(Color.black);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(100,150);
frame.setVisible(true);
}
public static void main(String[] args){
new Carlight();
}
}
如何使此代码有效以及如何获得改变颜色的形状?
答案 0 :(得分:2)
import java.awt.Color;
import java.awt.Graphics;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class carlight extends JPanel
{
private Color lastColor = Color.YELLOW;
// For telling the panel to be repainted at regular intervals
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
@Override
public void paintComponent(Graphics g)
{
super.paintComponents(g);
if(lastColor.equals(Color.YELLOW))
{
lastColor = Color.GREEN;
}
else
{
lastColor = Color.YELLOW;
}
g.setColor(lastColor);
g.fillOval(25, 25, 10, 10);
}
public carlight()
{
JFrame frame = new JFrame();
frame.setTitle("Carlights");
frame.add(this);
frame.setBackground(Color.black);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(100, 150);
frame.setVisible(true);
service.scheduleAtFixedRate(new Runnable()
{
public void run()
{
repaint();
}
}, 0, 1, TimeUnit.SECONDS);
}
public static void main(String[] args)
{
new carlight();
}
}
好的,