JScrollPane 中的 Java JPanel?

标签 java swing jpanel jscrollpane layout-manager

我有一个 JFrame,在这个 JFrame 中我有一个我在上面绘制的 JPanel,这个 Panel 可以是任何大小,所以我把它放在一个 JScrollpane 中,当面板大于窗口屏幕大小时我可以滚动。

不幸的是,它没有像我预期的那样工作:

  1. 使JFrame窗口小于JPanel大小不显示滚动条

  2. JScrollPane 的大小现在似乎已锁定为我添加到其中的 JPanel 的大小,而之前它已调整为 JFrame 窗口的边界(它仍然有点这样做,但现在只是垂直方向?!)

  3. JPanel 似乎采用 JScrollpane 的大小,无论我为首选大小设置了什么

我确定我在做一些愚蠢的事情,如果有人能指出我将不胜感激!

JPanel imageCanvas = new JPanel(); // 'Canvas' to draw on
JScrollPane scrollPane = new JScrollPane();
    
// set size of 'canvas'
imageCanvas.setMinimumSize(new Dimension(100,100));

// Scroll pane smaller then the size of the canvas so we should get scroll bars right?
scrollPane.setMinimumSize(new Dimension(50,50)); 
    
// Add a border to 'canvas'
imageCanvas.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
    
scrollPane.setViewportView(imageCanvas);

最佳答案

setPreferredSize() 是诀窍,组件上的 setMinimumSize() 甚至 setSize() 都会被 JScrollPane 忽略。这是一个使用红色边框的工作示例。

import java.awt.*;

import javax.swing.*;

public class Scroller extends JFrame {

    public Scroller() throws HeadlessException {
        final JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.red));
        panel.setPreferredSize(new Dimension(800, 600));

        final JScrollPane scroll = new JScrollPane(panel);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        add(scroll, BorderLayout.CENTER);
        setSize(300, 300);
        setVisible(true);
    }

    public static void main(final String[] args) throws Exception {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Scroller().setVisible(true);
            }
        });
    }
}

关于JScrollPane 中的 Java JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9393480/

相关文章:

java - 加载栏不重画java

Javamail 不获取所有邮件

Java Swing 和 ActionListener

java - 暂时禁用 MouseListener

java_give_question_to_me

java - Android:在网格中显示文本的简单 GridView

Java 按钮 : adding an ActionListener

java - 具有操作绑定(bind)的 jtable 复选框

java - 为什么我的子 JPanel 会在父 JPanel 中移动或错位?

java - 在 Java 中删除标签