2016-07-17 5 views
1

ここに私のコードがあります。 "白"を使用してパネルの背景を設定すると、 "写真" JLabelのアイコンの色が非常に明るくなるという問題があります。 代わりに「黒」を使用すると、写真JLabelの色が表示されます。 pic JLabelでどの色を使用しても問題ありません。パネルが白に設定されると、それらはすべて明るくなります。panel setBackgroundがJLabelsの色を乱している

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; 
} 

答えて

0

あなたはあなたのラベルが不透明であることを許可するようにlabel.setOpaque(true)を使用することができます。 その実装は、デフォルトではfalseのJComponentからのものです。

デフォルトでラベルは不透明ではありません。ラベルの背景をペイントする必要がある場合は、不透明度プロパティを "true"にすることをお勧めします。次のコードスニペットは、これを行う方法を示しています。

label.setOpaque(true); 

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

+0

あなたは天才です!ありがとうございます –

+0

それはあまりにも多くの:)それはスイングとの共通のトリックです。 応答があなたの問題に対処するなら、それを受け入れると思います:) – davidxxx

関連する問題