2013-05-27 2 views
2

У меня есть основной класс, который расширяет JFrame, который затем добавляет jpanel в jframe. Затем я пытаюсь установить цвет фона jpanel, но безрезультатно. Я не совсем уверен, где проблема, в соответствии с тем, что я нашел в google, просто установка setBackground(Color) в JPanel должна исправить это, но, похоже, это не работает. Кроме того, другие исправления для этого были setOpaque(true) и setVisible(true), или образуют JFrame с использованием getContentPane().setBackground(Color) Но ни один из них, похоже, не работает. Любые предложения были бы очень оценены, и если вам нужна дополнительная информация или у вас есть другие советы, пожалуйста, не стесняйтесь просвещать меня. :) Основной класс:Java Jpanel, не может установить цвет фона

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);  
    } 

} 

ответ

5

Вы перекрывая paint без вызова

super.paint(g); 

Это предотвращает фоновые и дочерние компоненты от окрашивается.

Для изготовленной на заказ картины в свинге переопределении paintComponentвместо и воспользоваться оптимизированной моделью краски Свинга, аннотировать с @Override и вызывать super.paintComponent(g).

Performing Custom Painting

+0

Это работает, почему это плохая идея, чтобы переопределить краска (г)? – samuraiseoul

+0

'paintComponent' использует двойную буферизацию, поэтому она более эффективна. – Reimeus

+0

Хорошо, спасибо, много! – samuraiseoul

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() {} метод ...

попытка выше кода он, несомненно, работает ....

Смежные вопросы