2012-04-13 14 views
9

Tôi có JPanel tùy chỉnh folowing và tôi đã aded nó vào khung của tôi bằng cách sử dụng Netbeans GUI builder nhưng background sẽ không thay đổi! Tôi có thể thấy hình tròn, vẽ bằng g.fillOval(). Chuyện gì vậy?JPanel setBackground (Color.BLACK) không có gì

public class Board extends JPanel{ 

    private Player player; 

    public Board(){ 
     setOpaque(false); 
     setBackground(Color.BLACK); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(player.getxCenter(), player.getyCenter(), player.getRadius(), player.getRadius()); 
    } 

    public void updatePlayer(Player player){ 
     this.player=player; 
    } 
} 

Trả lời

14

Nếu bảng điều khiển của bạn không bị mờ (trong suốt), bạn sẽ không thấy màu nền của mình.

+0

"Màu nền chỉ được sử dụng nếu thành phần bị mờ ..." - ['setBackground()'] (http://docs.oracle.com/javase/6/docs/api/ javax/swing/JComponent.html # setBackground% 28java.awt.Color% 29). – trashgod

+8

+1, OP đang viết 'setOpaque (false)' và vẫn hy vọng màu sắc sẽ được hiển thị: ( –

14

Bạn cũng phải gọi số super.paintComponent(); để cho phép API Java vẽ nền gốc. Siêu đề cập đến mã JPanel gốc.

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 

    g.setColor(Color.red); 
    g.fillOval(player.getxCenter(), player.getyCenter(), player.getRadius(), player.getRadius()); 
} 
+0

Tôi đã cố gắng mà trước (tìm thấy nó sau khi googling), nhưng nó không giải quyết vấn đề: ( –

+0

Tôi không chắc chắn, nhưng tôi mặc dù bảng điều khiển nên mờ đục. –

+0

Tôi đã thử điều đó quá, không thay đổi :) –

3

Tôi chỉ cố gắng một việc thực hiện trần xương và nó chỉ hoạt động:

public class Test { 

    public static void main(String[] args) { 
      JFrame frame = new JFrame("Hello"); 
      frame.setPreferredSize(new Dimension(200, 200)); 
      frame.add(new Board()); 
      frame.pack(); 
      frame.setVisible(true); 
    } 
} 

public class Board extends JPanel { 

    private Player player = new Player(); 

    public Board(){ 
     setBackground(Color.BLACK); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(player.getCenter().x, player.getCenter().y, 
      player.getRadius(), player.getRadius()); 
    } 
} 

public class Player { 

    private Point center = new Point(50, 50); 

    public Point getCenter() { 
     return center; 
    } 

    private int radius = 10; 

    public int getRadius() { 
     return radius; 
    } 
} 
+0

Tôi đang làm việc trong Netbeans vì vậy tôi không khó làm theo cách này nhưng tôi vẫn cố gắng tạo bảng của mình theo cách thủ công() và tự thêm nó vào Khung của tôi.Tôi nghĩ rằng tôi có thể làm việc với hội đồng quản trị của tôi bằng cách sử dụng tích hợp GUI builder nhưng theo cách đó tôi không thể thay đổi kích thước của Hội đồng này JPanel (không ngay cả trong mã kể từ khi nó autogenerated và tôi không thể truy cập nó). –

2

Bạn cần phải tạo một đối tượng JPanel mới trong các nhà xây dựng đồng quản trị. ví dụ

public Board(){ 
    JPanel pane = new JPanel(); 
    pane.setBackground(Color.ORANGE);// sets the background to orange 
} 
3
setOpaque(false); 

THAY ĐỔI để

setOpaque(true); 
+0

có thể bạn có thể giải thích bằng một vài từ có vấn đề gì với mã áp phích có và sau đó giải pháp của bạn là gì. Cảm ơn bạn! –

-1

Để hoàn toàn thiết lập nền tảng cho một màu nhất định:

1) thiết lập đầu tiên màu nền

2) phương thức gọi "Clear (0,0, this.getWidth)(), this.getHeight()) "(chiều rộng và chiều cao của vùng sơn thành phần)

Tôi nghĩ rằng đó là quy trình cơ bản để đặt nền ... Tôi đã có cùng một vấn đề.

Một gợi ý hữu ích khác: nếu bạn muốn vẽ NHƯNG KHÔNG ở một vùng cụ thể (ví dụ như mặt nạ hoặc "lỗ"), hãy gọi phương thức setClip() với hình dạng "lỗ" (bất kỳ hình dạng nào) và sau đó gọi phương thức Clear() (nền trước đó phải được đặt thành màu "lỗ").

Bạn có thể tạo vùng clip phức tạp hơn bằng cách gọi phương thức clip() (bất kỳ lần nào bạn muốn) SAU phương thức gọi setClip() để có nút giao cắt hình.

tôi không tìm thấy bất kỳ phương pháp cho công đoàn hoặc đảo của khu clip, chỉ nút giao thông, quá xấu ...

Hy vọng nó giúp

+0

Câu trả lời này là rất mơ hồ, đi vào các chủ đề ngẫu nhiên không quan trọng cho OP, và bước 2 thậm chí không biên dịch, hoặc có thể nó, nhưng không có bối cảnh cho phương pháp nói. Ít nhất, nó không tồn tại như một phương thức thành viên của JPanel hoặc JFrame. Vui lòng cung cấp thêm ngữ cảnh và súc tích trong bài đăng của bạn. – kevr