我有一个扩展JFrame的主类,然后将jpanel添加到jframe。然后我尝试设置jpanel的背景颜色,但无济于事。我不确定问题出在哪里,根据我在谷歌上发现的内容,只需在JPanel中设置setBackground(Color)
就可以解决这个问题,但它似乎不起作用。此问题的其他修复程序包括setOpaque(true)
和setVisible(true)
,或使用getContentPane().setBackground(Color)
形成JFrame但这些似乎都不起作用。任何建议都将非常感激,如果您需要更多信息,或有其他建议,请随时赐教。 :)
主要课程是:
public class main extends JFrame{
private Content content;
public main(){
content = new Content(400, 600);
this.setTitle("Shooter2.0");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.getContentPane().add(content);
this.getContentPane().setBackground(Color.BLACK);
this.pack();
this.setVisible(true);
try{
Thread.sleep(10000);
}catch(Exception e){}
}
public static void main(String[] args){
main game = new main();
}
}
,Content类是:
public class Content extends JPanel{
private viewItem ship;
public Content(int w, int h){
this.setPreferredSize(new Dimension(w, h));
this.setLayout(new BorderLayout());
this.createBattlefield();
this.setOpaque(true);
this.setBackground(Color.BLACK);
this.repaint();
this.setVisible(true);
}
public void createBattlefield(){
ship = new viewItem("bubble-field.png", 180, 550, 40, 42);
}
public void paint(Graphics g){
g.setColor(Color.BLACK);
this.setBackground(Color.BLACK);
ship.draw(g);
}
}
答案 0 :(得分:5)
你在不调用
的情况下覆盖paint
super.paint(g);
这可以防止背景和子组件被绘制。
对于Swing中的自定义绘制覆盖paintComponent
而不是并利用Swing的优化绘制模型,使用@Override
进行批注并调用super.paintComponent(g)
。
答案 1 :(得分:0)
替换代码块
public void paint(Graphics g){
g.setColor(Color.BLACK);
this.setBackground(Color.BLACK);
ship.draw(g);
}
按强>
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLACK);
ship.draw(g);
}
您正在构造函数中设置JPanel的背景颜色,因此在paintComponent(){}方法中不需要它...
尝试上面的代码肯定会有用......