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