[英]Java JPanel inside JScrollPane?
我有一个 JFrame,在这个 JFrame 中我有一个 JPanel,我可以在上面画画,这个面板可以是任何大小,所以我把它放在 JScrollpane 中,以便在面板大于窗口屏幕大小时滚动。
不幸的是,它不像我预期的那样工作:
使 JFrame 窗口小于 JPanel 大小不显示滚动条
JScrollPane 的大小现在似乎锁定到我添加到它的 JPanel 的大小,和以前一样,它调整到它的 JFrame 窗口的边界(它仍然有点这样做,但现在只是垂直的?!)
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);
}
});
}
}
// suggest a size of 'canvas'
_ImageCanvas.setPreferredSize(new Dimension(100,100));
// Scroll pane smaller then the size of the canvas so we should get scroll bars right?
_ScrollPane.setPreferredSize(new Dimension(50,50));
// ..later
_Frame.pack();
据我所知,有两种选择:
有关更多详细信息,请参阅 Javadoc: http : //docs.oracle.com/javase/7/docs/api/javax/swing/JScrollPane.html
查看Scrollable
界面,这可能有助于解决大小问题。
这两种方法可能有帮助:
boolean getScrollableTracksViewportWidth();
boolean getScrollableTracksViewportHeight();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.