我有一個任務,通過菜單按鈕顯示塗色的「眼睛」,以更改它們的顏色和背景顏色。接下來製作它們。但目前我被困在繪畫,sinc在我的JFrame中我創建了JPanel,包含繪製眼睛和按鈕的面板。按鈕呈現正常,但我的眼睛畫布不顯示。我嘗試將paint改爲paintComponent,以不同的方式設置contentPane,但仍然沒有任何效果。在另一個組件內部繪畫組件
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
public static void main(String[] args) {
final JFrame frame = new JFrame("Eyes");
frame.setPreferredSize(new Dimension(600, 450));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel players = new JPanel(new GridLayout(1, 3));
players.add(new JButton("Eyes color"));
players.add(new JButton("Eye pupil"));
players.add(new JButton("Background color"));
JPanel eyes = new JPanel();
Eyes e = new Eyes();
eyes.add(e);
eyes.setPreferredSize(new Dimension(600, 400));
JPanel content = new JPanel();
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
frame.setContentPane(content);
content.add(players);
content.add(eyes);
// frame.getContentPane().add(content);
frame.pack();
frame.setVisible(true);
}
}
class Eyes extends JPanel {
public Eyes(){
}
public void paint(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
BasicStroke bs = new BasicStroke(3.0f);
g2d.setBackground(Color.green);
g2d.setStroke(bs);
g2d.setColor(Color.yellow);
g2d.fillOval(50, 150, 200, 200);
g2d.fillOval(350, 150, 200, 200);
g2d.setColor(Color.BLACK);
g2d.drawOval(49, 149, 201, 201);
g2d.drawOval(349, 149, 201, 201);
g2d.fillOval(125, 225, 50, 50);
g2d.fillOval(425, 225, 50, 50);
}
}
這是我應該得到什麼: alt text http://img175.imageshack.us/img175/6420/eyes1.jpg 這是我有: alt text http://img132.imageshack.us/img132/827/eyes2i.jpg
當我試圖直接畫它的JFrame它的作品幾乎是完美的,除了背景的未設置。爲什麼setBackgroundColor不會以任何方式影響我的繪圖?
?你知道爲什麼背景設定不工作? – 2010-05-30 11:12:20
好的,在文檔中發現它自己。 – 2010-05-30 11:15:51
來自Java文檔:「在Graphics2D上下文中設置背景顏色只會影響後續clearRect調用,而不會影響組件的背景顏色。要更改組件的背景,請使用Component的適當方法。」 – 2010-05-30 11:16:39