我是Java的新手,我已经获得了通过小游戏学习java的建议。所以我正在尝试制作一个小型Pong游戏,我已经完成了一个按照我想要的方式移动的玩家,但是我之前没有显示的颜色背景。我尝试了很多方法,但我真的不知道这里的错误。这是我的代码:
窗口类
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){}
}
您的回答将非常受欢迎。
答案 0 :(得分:2)
阅读Top Level Containers上的Swing教程中的部分。它显示了一个框架的层次结构,它由框架,内容窗格和添加到内容窗格的组件组成。
但是窗口类中的自定义颜色没有显示,而背景显示为黑色
同样,内容窗格覆盖了框架,因此您可以看到黑色。您应该只将自定义颜色设置为内容窗格,而不是框架本身。
答案 1 :(得分:1)
您的问题包括:您正在设置contentPane的颜色,但是通过向contentPane的BorderLayout.CENTER
位置添加不透明组件(JLabel)来覆盖它。同样,这完全涵盖了contentPane。
有助于解决问题和其他无关建议的建议:
setOpaque(false)
使播放器JPanel不透明。这样,容纳它的容器上的任何背景颜色都将显示出来。答案 2 :(得分:1)
试试这个
JFrame window = new JFrame();
window.getContentPane.setBackground(Color.RED);
答案 3 :(得分:0)
JFrame window = new JFrame();
getContentPane().setBackground(Color.YELLOW); // ANY COLOR YOU WANT.
但是如果你想把Image放在你的背景中。试试这个。
setContentPane(new JLabel(new ImageIcon("C:\\Downloads\\file Sample.png")));