2016-07-17 6 views
1

Вот мой код в проблеме. Проблема в том, что если я использую «белый» для установки фона панели, цвета значка в «pic» JLabel становятся очень легкими. Если я использую вместо этого «черный», то цвета pic JLabel видны. Не имеет значения, какие цвета я использую в pic JLabel. Они все освещаются, как только панель установлена ​​в белый цвет.панель 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), чтобы ваша этикетка была непрозрачной. Его реализация исходит от JComponent, который по умолчанию является ложным.

Обратите внимание, что по умолчанию метки не являются непрозрачными. Если вам нужно нарисовать фон ярлыка, рекомендуется повернуть его свойство opacity в значение «true». В следующем фрагменте кода показано, как это сделать.

label.setOpaque(true); 

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

+0

Ты гений! Большое спасибо –

+0

Это слишком много :) Это общий трюк с Swing. Если ответ касается вашей проблемы, подумайте о ее принятии :) – davidxxx