繁体   English   中英

如何像JLabel一样转换JScrollPane

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM