Java- 调用方法改变椭圆的颜色
Java- Calling a method to change the color of an Oval
1.This 是更大游戏的一部分。我想调用方法来创建和显示 Jpanel,然后能够使用整数调用 displayColors 方法(基于其他 类 中的事件)来更改呈现的圆圈的颜色。我遇到了一个似乎有用的 repaint() 方法,但我不确定如何使用它。
import java.awt.*;
import javax.swing.*;
public class SimonView extends JPanel {
public Graphics2D showSimonsColor;
public void displayScreen() {
//Setting up the container
JFrame frame = new JFrame("Circle Color Game");
JLabel mitaLabel = new JLabel("A Changing Circle");
setLayout(new BorderLayout());
frame.add(mitaLabel, BorderLayout.PAGE_START);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new SimonView());
frame.setSize(700, 700);
frame.setVisible(true);
//just to test the display colors method. Pauses for 5 secs
SimonView sv = new SimonView();
for (int i = 0 ; i < 5 ; i ++) {
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
sv.displayColors(i);
}
}
@Override
public void paint(Graphics g) {
showSimonsColor = (Graphics2D) g;
showSimonsColor.setColor(Color.BLACK);
showSimonsColor.fillOval(75, 75, 500, 500);
}
public void displayColors(int color) {
switch (color) {
case 0: showSimonsColor.setColor(Color.WHITE);
break;
case 1: showSimonsColor.setColor(Color.RED);
break;
case 2: showSimonsColor.setColor(Color.BLUE);
break;
case 3: showSimonsColor.setColor(Color.GREEN);
break;
case 4: showSimonsColor.setColor(Color.YELLOW);
break;
}
}
public static void main(String[] arguments) {
SimonView sv = new SimonView();
sv.displayScreen();
}
}
- 您创建了三个不同的
SimonView
实例,none 它们之间有任何关系,只有一个实际显示在屏幕上
- 您应该调用
repaint
请求重新绘制您的组件(在您进行了一些需要重新绘制的更改之后)
- 您不应维护对
Graphics2D
对象的引用,而应在调用时从 paint
中绘制组件的当前状态。这意味着您将需要维护对您要使用的当前颜色的引用
- 您应该尽可能避免覆盖
paint
,这有很多有趣的原因,但使用 paintComponent
更简单
- 您应该调用
super.paint
(或者 super.paintComponent
,如果您覆盖了它)以保留油漆链
- 您应该使用 Swing
Timer
在 Swing 中执行延时操作,更新 UI 更安全并且不会阻塞事件调度线程,阻止它执行更新
- 您应该从事件调度线程的上下文中启动您的 UI,这只会减少某些系统上线程死锁的潜在问题
看看
了解更多详情
我能想到的最简单的方法是创建一种方法,将一种颜色作为输入并创建一个具有该颜色的椭圆,返回彩色椭圆。当您将这个椭圆形添加到面板时,它会擦除并重新绘制旧的椭圆形,从而改变颜色。
1.This 是更大游戏的一部分。我想调用方法来创建和显示 Jpanel,然后能够使用整数调用 displayColors 方法(基于其他 类 中的事件)来更改呈现的圆圈的颜色。我遇到了一个似乎有用的 repaint() 方法,但我不确定如何使用它。
import java.awt.*;
import javax.swing.*;
public class SimonView extends JPanel {
public Graphics2D showSimonsColor;
public void displayScreen() {
//Setting up the container
JFrame frame = new JFrame("Circle Color Game");
JLabel mitaLabel = new JLabel("A Changing Circle");
setLayout(new BorderLayout());
frame.add(mitaLabel, BorderLayout.PAGE_START);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new SimonView());
frame.setSize(700, 700);
frame.setVisible(true);
//just to test the display colors method. Pauses for 5 secs
SimonView sv = new SimonView();
for (int i = 0 ; i < 5 ; i ++) {
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
sv.displayColors(i);
}
}
@Override
public void paint(Graphics g) {
showSimonsColor = (Graphics2D) g;
showSimonsColor.setColor(Color.BLACK);
showSimonsColor.fillOval(75, 75, 500, 500);
}
public void displayColors(int color) {
switch (color) {
case 0: showSimonsColor.setColor(Color.WHITE);
break;
case 1: showSimonsColor.setColor(Color.RED);
break;
case 2: showSimonsColor.setColor(Color.BLUE);
break;
case 3: showSimonsColor.setColor(Color.GREEN);
break;
case 4: showSimonsColor.setColor(Color.YELLOW);
break;
}
}
public static void main(String[] arguments) {
SimonView sv = new SimonView();
sv.displayScreen();
}
}
- 您创建了三个不同的
SimonView
实例,none 它们之间有任何关系,只有一个实际显示在屏幕上 - 您应该调用
repaint
请求重新绘制您的组件(在您进行了一些需要重新绘制的更改之后) - 您不应维护对
Graphics2D
对象的引用,而应在调用时从paint
中绘制组件的当前状态。这意味着您将需要维护对您要使用的当前颜色的引用 - 您应该尽可能避免覆盖
paint
,这有很多有趣的原因,但使用paintComponent
更简单 - 您应该调用
super.paint
(或者super.paintComponent
,如果您覆盖了它)以保留油漆链 - 您应该使用 Swing
Timer
在 Swing 中执行延时操作,更新 UI 更安全并且不会阻塞事件调度线程,阻止它执行更新 - 您应该从事件调度线程的上下文中启动您的 UI,这只会减少某些系统上线程死锁的潜在问题
看看
了解更多详情
我能想到的最简单的方法是创建一种方法,将一种颜色作为输入并创建一个具有该颜色的椭圆,返回彩色椭圆。当您将这个椭圆形添加到面板时,它会擦除并重新绘制旧的椭圆形,从而改变颜色。