2015-05-25 4 views
3

Я хочу сделать прозрачный фон jTextArea. Я стараюсь setBackground (новый цвет (0,0,0,0)); Работает jTextField, jTextArea не работает.Как сделать jTextArea Прозрачный фон

как этот код.

// Not working.. Just remains gray. 
    jScrollPane1.setOpaque(false); 
    jScrollPane1.setBackground(new Color(0,0,0,0)); 
    jTextArea1.setOpaque(false); 
    jTextArea1.setBackground(new Color(0,0,0,0)); 

    // Working.. As it wants to be transparent. 
    jTextField1.setOpaque(false); 
    jTextField1.setBackground(new Color(0,0,0,0)); 

enter image description here

Как я могу JTextArea прозрачный фон?

Thanks & С уважением.

ответ

3

A JScrollPane является составным компонентом, он управляет/содержит JViewport, который является компонентом, который выполняет чертежи. Смотрите API:

Обычной операции нужно сделать, это установить цвет фона, который будет использоваться, если основной вид просмотра меньше, чем видовой или не непрозрачные. Это можно сделать, установив фоном цвет окна просмотра через scrollPane.getViewport(). SetBackground(). Причина настройки цвета окна просмотра, а не прокрутки заключается в том, что по умолчанию JViewport непрозрачен, что, помимо прочих вещей, означает, что он полностью заполнит свой фон, используя цвет фона . Поэтому, когда JScrollPane рисует свой фон, видовое окно обычно будет рисовать поверх него.

Так что вы должны изменить непрозрачные и цветовые свойства JViewport. Вы можете получить к нему доступ с помощью jScrollPane1.getViewport().

+1

Я знал, почему это не работает, благодаря вам. Проблема решена. –

0

Это пример включает 50% прозрачный

JTextArea textArea = new JTextArea(); 
textArea.setOpaque(false); 

JScrollPane scrollPane = new JScrollPane(textArea) { 
    @Override 
    protected void paintComponent(Graphics g) { 
     try { 
      Composite composite = ((Graphics2D)g).getComposite(); 

      ((Graphics2D)g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); 
      g.setColor(getBackground()); 
      g.fillRect(0, 0, getWidth(), getHeight()); 

      ((Graphics2D)g).setComposite(composite); 
      paintChildren(g); 
     } 
     catch(IndexOutOfBoundsException e) { 
      super.paintComponent(g); 
     } 
    }  
}; 

scrollPane.getViewport().setOpaque(false); 
scrollPane.setOpaque(false); 

редактировать Извините за ошибку. Это работа.

0

Следующие работали для меня.

JTextArea textArea = new JTextArea(); 
textArea.setOpaque(false); 
textArea.setBackground(new Color(red, green, blue, alpha)); 

JScrollPane scrollPane = new JScrollPane(textArea); 
scrollPane.getViewport().setOpaque(false); 
scrollPane.setOpaque(false); 
Смежные вопросы