Как сделать JScrollPane Background прозрачным и JScrollBarr видимым с помощью JTextArea?

Вот чего я хочу добиться:

http://i.stack.imgur.com/g7pOE.png

Что я пробовал:

  1. jTextArea.setOpaque(false); это делает JTextArea прозрачным.
  2. jScrollPane.setOpaque(false); это не дает никакого эффекта
  3. затем я попробовал это, которое скрывает как JScrollPane, так и JTextArea.

    jScrollPane.getViewPort().setOpaque(false); 
    jScrollPane.setOpaque(false);
    
  4. затем я попробовал это, которое скрывает как JScrollPane, так и JTextArea.

    jScrollPane.setViewPort(new MyViewPort());
    class MyViewPort() extends JViewPort{
        public MyViewPort(){
            setOpaque(false);
        }
    }
    

Чего я хочу добиться, так это JScrollPane фон прозрачный и прозрачный JTextArea, где я должен добавить текст и видимый JScrollPane.

Обновление: мне понравилось, я могу добавить текст в textArea, но jscrollPane не прозрачен:

public class TransparentBackground extends javax.swing.JFrame {

    public TransparentBackground() {
        jScrollPane = new javax.swing.JScrollPane();
        jTextArea = new javax.swing.JTextArea();
        lblBackground = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jTextArea.setColumns(20);
        jTextArea.setRows(5);
        jScrollPane.setViewportView(jTextArea);
        jScrollPane.getViewport().setOpaque(false);
        jScrollPane.setOpaque(false);
        jTextArea.setOpaque(false);

        getContentPane().add(jScrollPane, new org.netbeans.lib.awtextra.AbsoluteConstraints(40, 40, 580, 300));

        lblBackground.setIcon(new javax.swing.ImageIcon(getClass().getResource("/bg.png"))); // NOI18N
        getContentPane().add(lblBackground, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 680, 390));

        pack();
    }

И когда я использую

jScrollPane.setViewPort(new MyViewPort());
class MyViewPort() extends JViewPort{
    public MyViewPort(){
        setOpaque(false);
    }
}

И textArea, и JScrollPane исчезают (прозрачные), но нуждаются в прозрачном и редактируемом jTextArea или могут добавлять в него текст.

Когда я устанавливаю собственный порт просмотра, результат выглядит так


person Ngima Sherpa    schedule 30.05.2016    source источник
comment
Если все непрозрачно, то должно работать нормально. Разместите правильный SSCCE, демонстрирующий проблему.   -  person camickr    schedule 30.05.2016
comment
Да, это работает, но я не могу добавить текст в jTextArea. Это моя проблема..   -  person Ngima Sherpa    schedule 30.05.2016
comment
Затем предоставляет нам наглядный пример того, что это не работает ... потому что у меня есть полдюжины примеров, которые делают   -  person MadProgrammer    schedule 30.05.2016
comment
пожалуйста, проверьте пример.   -  person Ngima Sherpa    schedule 30.05.2016
comment
если у вас есть полдюжины рабочих примеров, не могли бы вы дать их мне.   -  person Ngima Sherpa    schedule 30.05.2016
comment
I can not add text in jTextArea - изменение свойства непрозрачности компонента не влияет на возможность добавления текста в компонент. У вас есть проблемы с вашим кодом, поэтому вам нужно опубликовать SSCCE. please check example. - код, который вы разместили, использует сторонние API и не компилируется. Следовательно, это НЕ SSCCE. Опубликуйте демонстрацию, в которой используются API только из базового JDK. Нет необходимости использовать сторонние API, чтобы сделать компонент непрозрачным. Опубликуйте правильный SSCCE, чтобы мы могли скомпилировать выполнение, если вам нужна дополнительная помощь.   -  person camickr    schedule 30.05.2016
comment
Да, вы правы, это сработало.   -  person Ngima Sherpa    schedule 31.05.2016


Ответы (1)


Я не знаю, что не так с закрытым кодом, возможно, это связано с использованием перетаскивания. Вот код, который работал. Спасибо Camickr и MadProgrammer за ваше предложение. :)

import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.*;

public class TransparentBackground1 extends JFrame {
    private javax.swing.JScrollPane jScrollPane;
    private javax.swing.JTextArea jTextArea;
    private javax.swing.JLabel lblBackground;

    public TransparentBackground1() {
        setPreferredSize(new Dimension(675, 375));
        jScrollPane = new JScrollPane();
        jTextArea = new JTextArea();
        lblBackground = new JLabel();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new FlowLayout());

        jTextArea.setColumns(20);
        jTextArea.setRows(5);
        jScrollPane.setViewportView(jTextArea);

        //Code To make transparent
        jScrollPane.getViewport().setOpaque(false);
        jScrollPane.setOpaque(false);
        jTextArea.setOpaque(false);


        lblBackground.setIcon(new ImageIcon(getClass().getResource("/bg.png"))); // NOI18N

        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TransparentBackground().setVisible(true);
            }
        });
    }
}

Вывод

person Ngima Sherpa    schedule 31.05.2016