Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 透明JTextPane中的插入符号_Java_Swing - Fatal编程技术网

Java 透明JTextPane中的插入符号

Java 透明JTextPane中的插入符号,java,swing,Java,Swing,在我正在编写的程序中,我有一个透明的、可编辑的JTextPane(允许背景显示),除了文本插入符号外,一切都很好 插入符号本身正常工作,但每次绘制时,它都会破坏其正后方区域的透明度,如图所示: 有没有办法使插入符号的背景透明,而不必重新绘制整个框架DefaultCaret没有setOpaque()方法,因此我不太确定如何执行此操作 谢谢 编辑:我还不能回答我自己的问题,但我最终写了一个工作完美的SSCCE,所以我的程序肯定还有其他问题。作为将来的参考,这是我写的(工作)代码: import j

在我正在编写的程序中,我有一个透明的、可编辑的JTextPane(允许背景显示),除了文本插入符号外,一切都很好

插入符号本身正常工作,但每次绘制时,它都会破坏其正后方区域的透明度,如图所示:

有没有办法使插入符号的背景透明,而不必重新绘制整个框架
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);

    }

}
有关问题和两个解决方案,请参见

基本上,您可以使用:

panel.add( new AlphaContainer(componentWithTransparency) );

对于你的第一个问题,你可以得到一个免费答案:)未来的问题应该包括一个适当的
SSCCE
,它可以演示问题。

你能提供一些很棒的代码吗?要重现你的问题,我们必须手工编写代码。由于您已经编写了代码,您只需将您的已完成代码添加到问题中,这样我们就可以快速研究该问题。请发表一篇文章,我最初是用JRuby编写这个程序的,所以我刚才花了一点时间编写了一个SSCCE…它工作得非常好。我的代码可能还有其他错误,与JTextPane无关,因此我将再次检查。谢谢你的帮助,很抱歉给你添麻烦。