gpt4 book ai didi

java - 如何像 JLabel 一样转换 JScrollPane

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:12 24 4
gpt4 key购买 nike

我必须将 JScrollPane 更改为 JLabel 之类的内容。我在这里使用了这段代码:

myJScroll.setBorder(null);
myJScroll.setEnabled(false);
myJScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
myJScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

但是使用setEnable(false),它有另一种颜色覆盖此 Pane 。

如何将这种颜色更改为另一种颜色?

最佳答案

JScrollPane 包含默认情况下不透明的 Viewport 组件。您可以为视口(viewport)设置自定义背景颜色:

myJScroll.getViewport().setBackground(Color.BLUE);

或使视口(viewport)不透明:

myJScroll.getViewport().setOpaque(false);

根据您的需要,您可能还希望使 JScrollPane 变得不透明(以获取滚动 Pane 父组件的真实背景颜色:

myJScroll.setOpaque(false);

还要记住要添加到视口(viewport)的组件的不透明度和默认背景颜色。

例如,尝试将此作为测试用例:

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();
}
}

关于java - 如何像 JLabel 一样转换 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32062778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com