[英]How to convert JScrollPane like JLabel
我必须将JScrollPane
更改为JLabel
。 我在这里使用此代码:
myJScroll.setBorder(null);
myJScroll.setEnabled(false);
myJScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
myJScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
但是使用setEnable(false)
,它具有覆盖此窗格的另一种颜色。
如何将这种颜色更改为另一种颜色?
JScrollPane
包含一个默认情况下不透明的Viewport
组件。 您可以为Viewport
设置自定义背景色:
myJScroll.getViewport().setBackground(Color.BLUE);
或使视口不透明:
myJScroll.getViewport().setOpaque(false);
并且根据您的需要,您可能还希望使JScrollPane
不透明(以获取滚动窗格的父组件的真实背景色:
myJScroll.setOpaque(false);
还请记住要添加到视口的组件的不透明度和默认背景色。
例如,尝试将其作为测试用例:
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ScrollPaneTest extends JPanel
{
private static final long serialVersionUID = 1L;
public ScrollPaneTest()
{
super(new BorderLayout());
JPanel myScrolledComponent = new JPanel(new BorderLayout());
myScrolledComponent.setBackground(Color.YELLOW);
myScrolledComponent.setOpaque(false);
myScrolledComponent.add(new JLabel("Some text"), BorderLayout.CENTER);
JScrollPane myJScroll = new JScrollPane(myScrolledComponent);
myJScroll.setBackground(Color.CYAN);
myJScroll.setOpaque(false);
myJScroll.setBorder(null);
myJScroll.setEnabled(false);
myJScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
myJScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
myJScroll.getViewport().setBackground(Color.MAGENTA);
myJScroll.getViewport().setOpaque(false);
super.add(myJScroll, BorderLayout.CENTER);
return;
}
@SuppressWarnings("deprecation")
public static void main(String[] args)
{
JFrame f = new JFrame();
f.setBackground(Color.BLUE);
ScrollPaneTest test = new ScrollPaneTest();
test.setBackground(Color.RED);
f.add(test);
f.pack();
f.show();
}
}
上面的类将显示带有红色背景的JLabel
文本(一直透明到ScrollPaneTest
组件。
根据您的评论的第二个示例:
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ScrollPaneTest2 extends JScrollPane
{
private static final long serialVersionUID = 1L;
public ScrollPaneTest2()
{
super();
super.setBackground(Color.CYAN);
super.getViewport().setBackground(Color.MAGENTA);
super.getViewport().setOpaque(false);
return;
}
@SuppressWarnings("deprecation")
public static void main(String[] args)
{
JFrame f = new JFrame();
f.setBackground(Color.BLUE);
ScrollPaneTest2 scrollPane = new ScrollPaneTest2();
scrollPane.setBackground(Color.RED);
f.add(scrollPane);
JPanel myScrolledComponent = new JPanel(new BorderLayout());
myScrolledComponent.setBackground(Color.YELLOW);
myScrolledComponent.setOpaque(false);
myScrolledComponent.add(new JLabel("Some text"), BorderLayout.CENTER);
scrollPane.getViewport().setView(myScrolledComponent);
scrollPane.setBorder(null);
scrollPane.setEnabled(false);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
f.pack();
f.show();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.