Java 我的JFrame背景赢了';不变
我是Java新手,有人建议我通过小游戏学习Java。所以我尝试做一个小的乒乓球游戏,我做了一个球员,移动就像我想要的,但我之前的颜色背景,它不再显示了。我尝试了很多方法,但我真的不知道这里的错误。这是我的密码: 窗口类Java 我的JFrame背景赢了';不变,java,swing,Java,Swing,我是Java新手,有人建议我通过小游戏学习Java。所以我尝试做一个小的乒乓球游戏,我做了一个球员,移动就像我想要的,但我之前的颜色背景,它不再显示了。我尝试了很多方法,但我真的不知道这里的错误。这是我的密码: 窗口类 import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; public class Window{ public Window(){ JFrame window = ne
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
public class Window{
public Window(){
JFrame window = new JFrame();
Player player = new Player();
window.setSize(720, 480);
window.setResizable(true);
window.setTitle("2DGame");
window.setUndecorated(false);
window.setBackground(new Color(16,16,16));
window.getContentPane().add(player);
window.setLocationRelativeTo(null);
window.getContentPane().setBackground(Color.BLACK);
window.setVisible(true);
window.setMinimumSize(new Dimension(720, 480));
}
}
球员级别
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Player extends JPanel implements ActionListener, KeyListener{
Timer t = new Timer(5, this);
private int speed = 2;
private int ydirection = 0;
private int x = 28;
private int y = 190;
private boolean key1 = false;
private boolean key2 = false;
public Player(){
t.start();
addKeyListener(this);
this.setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paint(Graphics g){
super.paint(g);
g.setColor(new Color(50, 50, 50));
g.fillRect(x, y, 20, 100);
}
public void actionPerformed(ActionEvent e){
repaint();
y += ydirection;
}
public void keyPressed(KeyEvent e){
int KeyCode = e.getKeyCode();
if(KeyCode == KeyEvent.VK_W){
ydirection = -speed;
key1 = true;
}
if(KeyCode == KeyEvent.VK_S){
ydirection = speed;
key2 = true;
}
if(key1 == true && key2 == true){
ydirection = 0;
}
}
public void keyReleased(KeyEvent e){
int KeyCode = e.getKeyCode();
if(KeyCode == KeyEvent.VK_W){
ydirection = 0;
key1 = false;
}
if(KeyCode == KeyEvent.VK_S){
ydirection = 0;
key2 = false;
}
if(KeyCode == KeyEvent.VK_ESCAPE){
System.exit(0);
}
}
public void keyTyped(KeyEvent e){}
}
您的回答将不胜感激。您的问题包括:您正在设置contentPane的颜色,但通过向contentPane的
边框布局.中间位置添加不透明组件(JLabel)来覆盖它。同样,这完全覆盖了contentPane
帮助解决问题的建议和其他无关的建议:
- 通过对播放器JPanel调用
setOpaque(false)
使其不不透明。这样,容器上的任何背景色都会显示出来
- 或者简单地设置播放器JPanel的背景色,因为它现在充当contentPane,因为它覆盖了实际contentPane的中心部分
- 副建议1:不要覆盖JPanel的paint方法,而应覆盖其paintComponent方法,因为paint涉及绘制子组件和边框,这是您不希望产生副作用的,并且因为paint不使用JPanel的双缓冲,因此,如果覆盖paintComponent,动画将更加平滑
- 使用键绑定而不是键侦听器可以减少GUI焦点混乱带来的麻烦李>
您的问题包括:您正在设置contentPane的颜色,但通过向contentPane的边框布局.居中位置添加不透明组件(JLabel)来覆盖它。同样,这完全覆盖了contentPane
帮助解决问题的建议和其他无关的建议:
- 通过对播放器JPanel调用
setOpaque(false)
使其不不透明。这样,容器上的任何背景色都会显示出来
- 或者简单地设置播放器JPanel的背景色,因为它现在充当contentPane,因为它覆盖了实际contentPane的中心部分
- 副建议1:不要覆盖JPanel的paint方法,而应覆盖其paintComponent方法,因为paint涉及绘制子组件和边框,这是您不希望产生副作用的,并且因为paint不使用JPanel的双缓冲,因此,如果覆盖paintComponent,动画将更加平滑
- 使用键绑定而不是键侦听器可以减少GUI焦点混乱带来的麻烦李>
阅读上Swing教程的部分。它显示由框架、内容窗格和添加到内容窗格的组件组成的框架层次结构
但是我在window类中的自定义颜色没有显示,相反,背景显示为黑色
同样,内容窗格覆盖了框架,因此您可以看到黑色。您应该只在内容窗格中设置自定义颜色,而不是框架本身。阅读上Swing教程的部分。它显示由框架、内容窗格和添加到内容窗格的组件组成的框架层次结构
但是我在window类中的自定义颜色没有显示,相反,背景显示为黑色
同样,内容窗格覆盖了框架,因此您可以看到黑色。您只需将自定义颜色设置为内容窗格,而不是框架本身。尝试这样做
JFrame window = new JFrame();
window.getContentPane.setBackground(Color.RED);
像这样试试
JFrame window = new JFrame();
window.getContentPane.setBackground(Color.RED);
但如果你想把图像放在背景中。试试这个
setContentPane(new JLabel(new ImageIcon("C:\\Downloads\\file Sample.png")));
但如果你想把图像放在背景中。试试这个
setContentPane(new JLabel(new ImageIcon("C:\\Downloads\\file Sample.png")));
谢谢你的建议。我添加了set不透明(false),并将绘制方法更改为paintComponent。但是我在window类中的自定义颜色没有显示,相反,背景显示为黑色。你能帮我吗?谢谢你的建议。我添加了set不透明(false),并将绘制方法更改为paintComponent。但是我在window类中的自定义颜色没有显示,相反,背景显示为黑色。你能帮我做这个吗?