2013-11-26 45 views
0

我在我正在編寫的程序(允許背景顯示通過)中有一個透明的,可編輯的JTextPane,並且除文本插入符號之外,一切運行良好。插入透明JTextPane

插入符號本身的正常動作,但每次它的繪製時間,它打破了區域的透明度就在後面,所看到的圖像:

image

有什麼辦法使背景插入符號透明而不重新繪製整個框架? DefaultCaret沒有setOpaque()方法,所以我不太清楚如何去做這件事。

謝謝!

編輯:我不能回答我自己的問題,但我最終編寫了一個完美的SSCCE,所以我的程序肯定有其他錯誤。對於未來的參考,這是(工作)的代碼,我寫道:

import java.awt.*; 

import javax.swing.*; 

class TransparentScrollPane extends JScrollPane { 
    public TransparentScrollPane(Component view) { 
     super(view);   
     this.setPreferredSize(new Dimension(540,480)); 
     this.setOpaque(false); 
     this.viewport.setOpaque(false); 
     this.setBorder(null); 
    } 
} 

public class TextPaneExample extends JTextPane { 

    public TextPaneExample() 
    { 
     super(); 
     this.setOpaque(false); 
    } 
    public void paintComponent(Graphics g) 
    { 
     g.setColor(new Color(255,255,255,128)); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
     super.paintComponent(g); 
    } 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.setSize(640, 480); 

     JPanel panel = new JPanel(); 
     panel.setBackground(new Color(255,128,255)); 

     TextPaneExample textPane = new TextPaneExample(); 
     TransparentScrollPane scroller = new 
       TransparentScrollPane(textPane); 
     textPane.setBackground(new Color(255,255,255,128)); 

     frame.add(panel); 

     panel.add(scroller,BorderLayout.CENTER); 

     frame.setVisible(true); 

    } 

} 
+0

你可以把一些代碼很好嗎? – CRazyProgrammer

+0

要重現您的問題,我們必須手動編寫代碼。由於您已經編碼,您可以將您的完成代碼添加到您的問題中,以便我們可以快速查看問題。請發佈[SSCCE](http://sscce.org) – Sage

+0

我最初是在JRuby中編寫程序的,所以我花了一小會兒才寫了一個SSCCE ......這很好用。我的代碼可能與JTextPane沒有任何關係,所以我會再次通讀它。感謝您的幫助,併爲此感到抱歉。 – user2804914

回答

1

Backgrounds With Transparency的問題和一些解決方案。

基本上你可以使用:

panel.add(new AlphaContainer(componentWithTransparency)); 

關於第一個問題,你得到一個免費的答案:)未來的問題,應包括適當SSCCE演示該問題。