我正在编写的程序中有一个透明的,可编辑的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);
}
}
答案 0 :(得分:1)
有关问题和一些解决方案,请参阅Backgrounds With Transparency。
基本上你可以使用:
panel.add( new AlphaContainer(componentWithTransparency) );
对于你的第一个问题,你得到一个免费答案:)未来的问题应该包括一个证明问题的正确SSCCE
。