java - 在 JScrollPane 中使用绝对布局

标签 java swing layout jscrollpane null-layout-manager

我需要使用具有绝对布局的 JScrollPane。我知道根本不推荐使用 setLayout(null)。我一直在读到,如果您想对 JScrollPane 使用绝对布局,则必须设置内部元素的首选大小属性,以便 JScrollPane 可以计算其大小。

我一直在尝试下一个代码来更改元素的顺序和大小,但我无法弄清楚哪里出错了。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class frame extends JFrame {

private JPanel contentPane;
private JScrollPane scrollPane;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frame frame = new frame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public frame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setLayout(null);
    setContentPane(contentPane);

    JPanel panel = new JPanel();
    panel.setBackground(Color.red);
    panel.setBounds(0,0,600,600);
    panel.setPreferredSize(new Dimension(420,280));

    scrollPane = new JScrollPane(panel);
    scrollPane.setBounds(0, 0, 600, 600);
    scrollPane.setLayout(null);
    scrollPane.setBackground(Color.green);

    scrollPane.add(panel);
    scrollPane.setPreferredSize(new Dimension(450,300));
    contentPane.add(scrollPane);
}
}

为什么 setPreferredSize 没有做正确的工作? 提前致谢。

最佳答案

首先,不要更改滚动 Pane 的布局管理器,它不是你想要实现的所必需的

其次,滚动 Pane 通过 JViewport 工作。您必须将容器添加到其中(scrollPane.add(panel) 是错误的做法),而应使用 scrollPane.setViewportView(panel)

第三,你想看看Scrollable作为滚动 Pane 的界面不仅仅依赖于其内容的首选大小

关于java - 在 JScrollPane 中使用绝对布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995516/

相关文章:

java - 将属性添加到节点时,Neo4j 数据库会因 Lucene 日志而爆炸

Java DLL 链接错误

java - 使用 JMH Java 微基准测试浮点打印的随机数据

html - 使用布局文件在 Rails 中提供静态 HTML

java - OnTouch 返回 "false"但触摸事件未传递到基础 View

java - 如何确定 JFrame 所在屏幕的分辨率?

java - (JTabbedPane) 与 Nimbus 不同,透明度在 L&F 上不起作用

Java Swing : Controlling focus with textfield and autocompletion dialog/menu

java - 是否可以让 MouseMotionListener 监听所有系统鼠标运动事件?

HTML/CSS 布局 - 在 1 个图中垂直显示 2 个图像