2017-08-13 70 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