簡體   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