panel setBackground正在弄乱JLabels的颜色

时间:2016-07-17 08:43:33

标签: java panel jlabel

这是我的问题代码。 问题是,如果我使用" white"设置面板的背景," pic"中的图标颜色。 JLabel变得非常轻盈。 如果我使用" black"相反,pic JLabel的颜色是可见的。 我在pic JLabel中使用的颜色并不重要。面板设置为白色后,它们都会变亮。

有没有其他方法可以设置面板的背景颜色而不影响JLabel的颜色?

Color black = new Color( 20, 20, 20, 255 );
Color white = new Color( 255, 255, 255, 255 );

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize( 1200, 500 );
frame.setVisible(true);
frame.getRootPane().setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
frame.setLocationRelativeTo( null );
frame.setResizable( false );

JPanel panel= new JPanel();
frame.getContentPane().add( panel );
panel.setLayout( null );
panel.getAccessibleContext().setAccessibleName("panel");
panel.getAccessibleContext().setAccessibleDescription(" ");

// this is the line that causes problem
panel.setBackground( black );


JLabel pic = new JLabel( new ImageIcon( showBaseImage() ) );
panel.add( pic );
pic.setSize( 1200, 500 );
pic.setLocation( 1, 1);
pic.setBackground( black );


public BufferedImage showBaseImage(){
BufferedImage c = new BufferedImage( 1200, 500, BufferedImage.TYPE_INT_ARGB );
Graphics2D gg= c.createGraphics();
gg.setPaint( new Color( 125, 0, 125, 255  ));
gg.fillRect( 0,0, c.getWidth(), c.getHeight() );

gg.setPaint( new Color( 255, 255, 225, 255  ));
imgFont = new Font( "Arial", Font.BOLD, 45 );
gg.setFont( imgFont );

gg.drawString( "Write something", 20, 20 );
gg.dispose();
return c;
}

1 个答案:

答案 0 :(得分:0)

您可以使用label.setOpaque(true)来允许标签不透明。 它的实现来自JComponent,默认为false。

  

请注意,默认情况下标签不是不透明的。如果需要绘制标签的背景,建议您将其不透明度属性设置为“true”。以下代码段显示了如何执行此操作。

label.setOpaque(true);

https://docs.oracle.com/javase/tutorial/uiswing/components/label.html