2016-05-30 99 views
0

這就是我想要達到的目標:如何設置JScrollPane背景透明和JScrollBarr可見與JTextArea?

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

我想實現的是JScrollPane背景透明,透明JTextArea,我應該能夠添加文字和可見JScrollPane

更新: 我不喜歡這樣,我可以在文本區域添加文本,而是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

+3

如果一切都爲透明的,那麼它應該工作的罰款。發佈一個合適的[SSCCE](http://sscce.org/)來說明問題。 – camickr

+0

Yah這是工作,但我不能在jTextArea中添加文本。這是我的問題.. –

+0

然後提供給我們一個可證明的例子,它不工作...因爲我有六個例子 – MadProgrammer

回答

0

我不知道什麼是錯與privious代碼,可能是由於使用拖放的。 這是有效的代碼。謝謝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