我正在用Java处理图形(特别是通过Swing和AWT libs),我想在屏幕上移动一个圆圈(生成线条),当线条到达画布边界时,将x
或y
坐标设置回0。我对这部分代码没有问题。
然而,现在我试图在坐标均为0时清除屏幕(使用super.paint(图形)
)并更改颜色。屏幕清除工作正常,但我不能更改颜色。似乎,当坐标均为0时,在(0,0)位置的条纹下会出现指定颜色的椭圆形。然而,我希望条纹的颜色改变,直到坐标重置为(0,0)。
这是我的代码:
@SuppressWarnings("serial")
public class Game extends JPanel
{
static final int SCREEN_X = 300;
static final int SCREEN_Y = 400;
int x = 0;
int y = 0;
private void moveBall()
{
x += 1;
y += 1;
if (x >= SCREEN_X) x = 0;
if (y >= SCREEN_Y) y = 0;
}
@Override
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (x == 0 && y == 0)
{
super.paint(g);
// Generate random value in [0, 5)
int rand_val = (new Random()).nextInt(5);
// Init random color variable
Color rand_color = Color.black;
// Pick a random color
switch (rand_val)
{
case 0:
rand_color = Color.black;
break;
case 1:
rand_color = Color.red;
break;
case 2:
rand_color = Color.green;
break;
case 3:
rand_color = Color.blue;
break;
case 4:
rand_color = Color.gray;
break;
}
// I'm assuming I need to do something more here?
// This is likely where my mistake is...
g2d.setColor(rand_color);
}
g2d.fillOval(x, y, 30, 30);
}
public static void main(String[] args) throws InterruptedException
{
JFrame frame = new JFrame("Mini Tennis");
Game game = new Game();
frame.add(game);
frame.setSize(SCREEN_X, SCREEN_Y);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
while (true)
{
game.moveBall();
game.repaint();
Thread.sleep(10);
}
}
}
// I'm assuming I need to do something more here?
// This is likely where my mistake is...
g2d.setColor(rand_color);
用于此油漆的Graphics2D
实例即将被处理。现在换颜色没用。
相反,可以更改组件本身的BG或FG颜色(即JPanel
),然后在每次绘制之前设置图形对象的颜色。
请注意更改和评论:
public class Game extends JPanel
{
static final int SCREEN_X = 300;
static final int SCREEN_Y = 400;
int x = 0;
int y = 0;
private void moveBall()
{
x += 1;
y += 1;
if (x >= SCREEN_X) {
x = 0;
}
if (y >= SCREEN_Y) {
y = 0;
}
}
@Override
public void paintComponent(Graphics g) { //for custom painting override paint componenet
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (x == 0 && y == 0)
{
// Generate random value in [0, 5)
int rand_val = new Random().nextInt(5);
// Init random color variable
Color rand_color = Color.black;
// Pick a random color
switch (rand_val)
{
case 0:
rand_color = Color.black;
break;
case 1:
rand_color = Color.red;
break;
case 2:
rand_color = Color.green;
break;
case 3:
rand_color = Color.blue;
break;
case 4:
rand_color = Color.gray;
break;
}
g2d.setColor(rand_color);
g2d.fillRect(0, 0, getWidth(), getHeight()); //clear screen
}
g2d.fillOval(x, y, 30, 30);
}
private final Color[] colors = {Color.black, Color.red, Color.green, Color.blue, Color.gray};
要使代码更简洁,请执行以下操作:
@Override
public void paintComponent(Graphics g) { //for custom painting override paint componenet
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (x == 0 && y == 0)
{
int rand_val = new Random().nextInt(colors.length);
Color rand_color = colors[rand_val];
g2d.setColor(rand_color);
g2d.fillRect(0, 0, getWidth(), getHeight()); //clear screen
}
g2d.fillOval(x, y, 30, 30);
}
我用html、jquery和css动画构建了一个“粘性头”。但有一件小事不能正常工作。 在这种情况下,棒头将是活动的,菜单的背景颜色从白色切换到绿色(带有动画)。 现在我需要一个函数,它将颜色从绿色切换回白色(与动画),如果头不再粘(=类粘将移除)。 我怎么才能意识到这一点呢? null null
在我的项目中,我想实现一个语法突出显示功能。我的意思是,当用户在代码区键入代码时,文本将像IDE(Eclipse、Intellij、Netbeans)一样立即高亮显示。 例如,如果我们在IntellijJavaIDE中键入“import”,那么它会将单词“import”涂成蓝色。在我的项目中,我想实现同样的事情。 我的目标是用蓝色突出特定的关键词。例如,如果关键字是“mov”、“load”、“xo
问题内容: 是的,语言规范定义结果为“ 2”。如果VM采取不同的方式,则不符合规范。 大多数编译器都会对此抱怨。以Eclipse为例,它将声称永远不会执行return块,但这是错误的。 编写这样的代码我需要知道如何执行此操作: 假设:我有这样的代码: 我想改变的颜色并以颜色为蓝色颜色绿色 M到红色的数字橙色 如何更改此文字的颜色?这些文本来自记事本,也可以直接在文本区域中键入。是非常糟糕的做法,永
有没有办法在Java图形编程中更改各个颜色组件(除了bright()和darker()方法之外)?例如,如果我创建了一个包含r、g、b颜色成分的颜色对象,然后想修改其中一个,有没有办法? 有没有办法快速改变其中一种颜色成分?
我想根据用户需要将我写的文本(和字体颜色)更改为另一种颜色。 我制作了一个JFrame,并添加了JTextPane。在文本窗格的右侧,我有一个不同颜色的列表(“白色”、“黑色”、“绿色”等)。Jframe还有一个JMenuBar,如果用户突出显示列表中的一个元素(比如黑色),我想更改textpane的背景色(我知道这很愚蠢,但这是老师的作业) 问题是,文本是黑色的,所以当我改变背景颜色时,文本“消
问题内容: 有什么办法可以在Eclipse控制台中更改文本颜色? 我不是在谈论何时将选项从黑色更改为例如红色的颜色。 我的意思是,就像我启动程序并执行代码一样,它有时会更改颜色。 例如: 我不是在谈论guis jframes等。我是在谈论Eclipse控制台。 问题答案: 虑到可能是通过使用不同的: sss将消息写入消息控制台。 消息控制台可能连接了多个流。 每个流可以以不同的颜色显示 看到这个线