Я пытаюсь изменить фон моей маленькой программы, как только кто-то попадает в пространство (32). Это просто не сработает, и я пробую разные вещи и все, что я могу найти в Интернете, например, положить g.setColor(Color.BLUE);
в начале блока public void paintComponent(Graphics g)
.JAVA setColor in paintComponent остается пустым
Здесь я получил следующий код. Моего Screen.java
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Screen extends JPanel implements Runnable{
Thread thread = new Thread(this);
Frame frame;
private int fps = 0;
public int scene = 0;
public boolean running = false;
public Screen(Frame frame){
this.frame = frame;
this.frame.addKeyListener(new KeyHandler(this));
thread.start();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
super.paint(g);
g.clearRect(0, 0, this.frame.getWidth(),this.frame.getHeight());
g.drawString(fps + "", 10, 10);
if (scene == 0) {
g.setColor(Color.BLUE);
} else if (scene == 1) {
g.setColor(Color.GREEN);
} else {
g.setColor(Color.white);
}
g.fillRect(0, 0, getWidth(), getHeight());
}
public void run() {
System.out.println("[Success] Frame Created!");
long lastFrame = System.currentTimeMillis();
int frames = 0;
running = true;
scene = 0;
while(running){
repaint();
frames++;
if(System.currentTimeMillis() - 1000 >= lastFrame){
fps = frames;
frames = 0;
lastFrame = System.currentTimeMillis();
}
try {
Thread.sleep(2);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
System.exit(0);
}
public class KeyTyped{
public void keySPACE() {
scene = 1;
}
public void keyESC(){
running = false;
}
}
}
KeyHandler.java
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyHandler implements KeyListener {
public Screen screen;
public Screen.KeyTyped keyTyped;
public KeyHandler(Screen screen){
this.screen = screen;
this.keyTyped = this.screen.new KeyTyped();
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
System.out.println(keyCode);
if(keyCode == 27){
this.keyTyped.keyESC();
}
if(keyCode == 32){
this.keyTyped.keySPACE();
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
Я не знаю, почему код не в одном блоке. Похоже, я делаю с этим что-то не так?
Что вы подразумеваете под словом "it does not work"? что происходит вместо этого? есть ли какие-либо сообщения или трассировки стека на консоли? Как вы пытались диагностировать проблему (добавление случайного кода из Интернета в вашу программу, как правило, не будет работать)? –
О, черт возьми, я читал этот список о том, что хороший пост в stackoverflow перед тем, как я опубликовал это, и теперь я замечаю, что забыл описать половину проблемы. Фон просто остается пустым, как обычный начальный фон (Im более или менее colorblind и вижу только небольшие изменения, поэтому я не могу сказать вам, какой цвет фон точно получил, но его не синий или зеленый) Я попытался изменить код, поместите его в другое место, где я читал разные способы работы в Интернете. Добавлено super.paintComponent и т. Д. Нет сообщений, к сожалению. – luke
не беспокоится, и рад, что вы нашли время, чтобы прочитать список! вы отправитесь на лучший старт, чем многие люди. Я бы обратил особое внимание на те части, которые упоминают [SSCCEs] (http://sscce.org/) - часто раз, во время процесса создания одного из них в вашем вопросе, вы сами понимаете, в чем проблема твой собственный. –