gpt4 book ai didi

JScrollPane 中的 Java JPanel?

转载 作者:太空狗 更新时间:2023-10-29 22:45:37 30 4
gpt4 key购买 nike

我有一个 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/

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