1.这是一个更大的游戏的一部分。我想调用方法来创建和显示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();
}
}
答案 0 :(得分:1)
SimonView
实例,其中没有任何内容彼此相关,只有一个实际显示在屏幕上repaint
请求重新绘制您的组件(在您进行了一些需要重新绘制的更改之后)Graphics2D
对象的引用,而应该在paint
被调用时绘制组件的当前状态。这意味着您需要保持对您想要使用的当前颜色的引用paint
,但有很多有趣的原因,但使用paintComponent
只是更简单super.paint
(或super.paintComponent
,如果您改为覆盖它)以保留油漆链Timer
在Swing中执行延时动作,更新UI更安全,不会阻止事件调度线程,阻止它执行更新看看
了解更多详情
答案 1 :(得分:1)
我能想到的最简单的方法是创建一种方法,该方法将颜色作为输入并创建一个具有该颜色的椭圆,返回彩色椭圆。将此椭圆添加到面板时,它将擦除并重绘旧的椭圆,从而更改颜色。