如何使用 JTextArea 设置 JScrollPane 背景透明和 JScrollBarr 可见?

How to set JScrollPane Background transparent and JScrollBarr Visible with JTextArea?

这就是我想要实现的:

我尝试了什么:

  1. jTextArea.setOpaque(false); 这使得 JTextArea 透明。
  2. jScrollPane.setOpaque(false); 这样 没有效果
  3. 然后我尝试了隐藏 JScrollPaneJTextArea 的方法。

    jScrollPane.getViewPort().setOpaque(false); 
    jScrollPane.setOpaque(false);
    
  4. 然后我尝试了隐藏 JScrollPaneJTextArea 的方法。

    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 透明且可编辑或可以在其中添加文本。

When I set custom view port result is like this

我不知道原始代码有什么问题,可能是由于使用了拖放。 这是有效的代码。谢谢 CamickrMadProgrammer 的建议。 :)

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

Here is Output