“如何制作形状”;眨眼;还是在Java中更改颜色?
我试图学习如何绘制形状,并且能够a)绘制它,“冻结”过程,以背景颜色绘制,然后以原始颜色重新绘制,b)绘制形状并更改其颜色。到目前为止,我所能做的就是(眨眼): 我如何使这个代码工作,我如何得到一个形状来改变颜色“如何制作形状”;眨眼;还是在Java中更改颜色?,java,graphics,colors,drawing,Java,Graphics,Colors,Drawing,我试图学习如何绘制形状,并且能够a)绘制它,“冻结”过程,以背景颜色绘制,然后以原始颜色重新绘制,b)绘制形状并更改其颜色。到目前为止,我所能做的就是(眨眼): 我如何使这个代码工作,我如何得到一个形状来改变颜色 import java.awt.Color; import java.awt.Graphics; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; i
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();
}
}
嗯
- 在调用组件时不要进行睡眠调用。这意味着你是 强制UI挂起/暂停。这很糟糕
- 我创建了一个ScheduledExecutorService,用于定期调用repaint方法
- 绘制方法更改lastColor的颜色。大多数情况下,你会看一些模型,找出它的状态,选择你应该使用的颜色
- 如果问题是您不打算更改颜色,而是处于关闭/打开状态,那么您应该有一个表示状态的布尔值,并且只有当它处于打开状态时才绘制圆
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();
}
}