2017-08-13 65 views
0

旋轉JPanel有一個奇怪的問題。Java:JPanel邊框旋轉,但背景不是

JPanel pnlDummy = new javax.swing.JPanel() 
    { 
     @Override 
     public void paintComponent(Graphics g) 
     { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.rotate(17 * (Math.PI/180)); 
     }; 
    }; 
    pnlDummy.setBackground(Color.red); 
    pnlDummy.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 153, 0), 4)); 
    pnlDummy.setMinimumSize(new Dimension(200,100)); 
    pnlDummy.setPreferredSize(new Dimension(200,100)); 
    pnlDummy.setMaximumSize(new Dimension(200,100)); 

    pnlParent.add(pnlDummy); 

我有這樣的:

enter image description here

相反,我想有紅色背景旋轉,就像邊界一樣。我錯過了什麼?謝謝!

+1

您重寫的'paintComponent(g)'控制'JPanel'內的繪畫。 JPanel的佈局不會改變,背景填充它。如果要更改背景的繪製方式,請在覆蓋的'paintComponent(g)'中繪製它。如果你想改變'JPanel'在其父代中的繪製方式,則需要覆蓋父代的'paintComponent(g)' – c0der

+0

謝謝你,cOder。問題現在已經清楚了。目前還不清楚我怎樣才能改變JPanel的佈局,覆蓋父面板的'paintComponent(g)'方法。謝謝! –

+0

查看答案一些更多信息 – c0der

回答

1

您重寫的paintComponent(g)控制着JPanel中的繪畫。
JPanel的佈局不會改變,背景填充它。
如果要更改背景的繪製方式,請在覆蓋的paintComponent(g)中對其進行繪製。 如果您想要更改JPanel在其父級中的繪製方式,則需要覆蓋父級的paintComponent(g)
(覆蓋paintComponent(g)表示您覆蓋由佈局管理器定義的佈局)。

+0

我不想重寫父面板的佈局。我正在使用AbsoluteLayout將面板放在另一個面板上的圖像上。我想我可以嘗試設置一個清晰的背景並在面板內繪製一個矩形。除非存在其他選項... –

+0

編輯:沒有此選項不起作用。當邊框超出JPanel背景的邊界時,邊框的一部分會被隱藏起來。 –

+0

通過'AbsoluteLayout'我猜你的意思是空佈局管理器,所以你還沒有使用佈局管理器。如需更多幫助,請發佈[mcve],澄清期望的輸出結果(我想這意味着一個新的問題) – c0der