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

时间:2016-05-30 02:51:55

标签: java swing jscrollpane jtextarea jscrollbar

这就是我想要实现的目标:

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

我尝试了什么:

  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);
        }
    }
    
  5. 我想要实现的是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

1 个答案:

答案 0 :(得分: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);
            }
        });
    }
}

Here is Output