工件显示 JTextPane 背景颜色的自定义颜色的使用
Artifact shows on usage of custom color for JTextPane Background Color
使用定制颜色后:
Color bg = new Color(0f,0f,0f,0.5f);
对于 JTextPane
背景,我可以看到 JTextPane
的背景与来自 Jlabel
的部分背景一起显示,其中包括 JTextPane
。
现场图片:
因此 JTextPane
背景的底部没问题,但文本后面的顶部部分出现了一些问题。
我该如何解决? JTextPane
的简单透明背景使用自定义颜色是不是我弄错了?
这部分程序的代码:
t = new JTextPane();
SimpleAttributeSet style = new SimpleAttributeSet();
StyleConstants.setAlignment(style , StyleConstants.ALIGN_CENTER);
StyleConstants.setForeground(style , Color.white);
StyleConstants.setFontFamily(style, "Times new Roman");
StyleConstants.setFontSize(style, 20);
StyleConstants.setBold(style, true);
t.setParagraphAttributes(style,true);
t.setText(" " + text.getT1().get(0).toUpperCase());
t.setOpaque(true);
Color bg = new Color(0f,0f,0f,0.5f);
t.setBackground(bg);
t.setEditable(false);
t.setBounds(250, 400, 300, 50);
animation.add(t);
我想我遇到了类似的问题。您至少需要将 JTextPane 的容器设为不透明且不透明。否则 Swing 会非常错误地计算背景。我认为您可能会将其报告为错误。
Swing 不正确支持透明背景。 Swing 根据 setOpaque(....) 属性.
期望组件完全不透明或不透明
使用透明背景时,需要先绘制父容器的背景,然后再绘制透明组件的背景。
查看 Background With Transparency 了解有关此过程的更多信息。
您可以自定义您的组件并使用如下代码进行您自己的绘画:
JPanel panel = new JPanel()
{
protected void paintComponent(Graphics g)
{
g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
};
panel.setOpaque(false); // background of parent will be painted first
panel.setBackground( new Color(255, 0, 0, 20) );
frame.add(panel);
或者更简单的方法是使用上面提供的AlphaContainer
class link.
使用定制颜色后:
Color bg = new Color(0f,0f,0f,0.5f);
对于 JTextPane
背景,我可以看到 JTextPane
的背景与来自 Jlabel
的部分背景一起显示,其中包括 JTextPane
。
现场图片:
因此 JTextPane
背景的底部没问题,但文本后面的顶部部分出现了一些问题。
我该如何解决? JTextPane
的简单透明背景使用自定义颜色是不是我弄错了?
这部分程序的代码:
t = new JTextPane();
SimpleAttributeSet style = new SimpleAttributeSet();
StyleConstants.setAlignment(style , StyleConstants.ALIGN_CENTER);
StyleConstants.setForeground(style , Color.white);
StyleConstants.setFontFamily(style, "Times new Roman");
StyleConstants.setFontSize(style, 20);
StyleConstants.setBold(style, true);
t.setParagraphAttributes(style,true);
t.setText(" " + text.getT1().get(0).toUpperCase());
t.setOpaque(true);
Color bg = new Color(0f,0f,0f,0.5f);
t.setBackground(bg);
t.setEditable(false);
t.setBounds(250, 400, 300, 50);
animation.add(t);
我想我遇到了类似的问题。您至少需要将 JTextPane 的容器设为不透明且不透明。否则 Swing 会非常错误地计算背景。我认为您可能会将其报告为错误。
Swing 不正确支持透明背景。 Swing 根据 setOpaque(....) 属性.
期望组件完全不透明或不透明使用透明背景时,需要先绘制父容器的背景,然后再绘制透明组件的背景。
查看 Background With Transparency 了解有关此过程的更多信息。
您可以自定义您的组件并使用如下代码进行您自己的绘画:
JPanel panel = new JPanel()
{
protected void paintComponent(Graphics g)
{
g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
};
panel.setOpaque(false); // background of parent will be painted first
panel.setBackground( new Color(255, 0, 0, 20) );
frame.add(panel);
或者更简单的方法是使用上面提供的AlphaContainer
class link.