【发布时间】:2017-01-02 20:17:38
【问题描述】:
我正在创建一个电路编辑器(类似于任何具有基本菜单和可指定尺寸的画布的常规绘图软件)。我目前正在尝试将以前不可滚动的画布 (JPanel) 转换为可滚动的画布。
目前明显的设计错误是,虽然滚动条似乎正确反映了画布的内部大小(当然可以比 JFrame 大得多),但由于添加了画布 JPanel主面板的BorderLayout 的CENTER,它总是与JFrame 一起调整大小。
public final class MainFrame extends JFrame
{
public MainFrame()
{
JPanel menuPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
// Populate Menu Panel
// ...
JPanel canvasPanel = new JPanel();
canvasPanel.setBackground(Color.white);
Dimension canvasDims = new Dimension(800,600);
canvasPanel.setPreferredSize(canvasDims);
canvasPanel.setMinimumSize(canvasDims);
canvasPanel.setMaximumSize(canvasDims);
JScrollPane canvasScrollPane = new JScrollPane(
canvasPanel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JPanel masterPanel = new JPanel(new BorderLayout());
masterPanel.add(menuPanel, BorderLayout.NORTH);
masterPanel.add(canvasScrollPane, BorderLayout.CENTER);
setContentPane(masterPanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1200, 700);
setMinimumSize(new Dimension(500, 500));
setLocationRelativeTo(null);
setVisible(true);
}
我已经阅读了很多关于 JPanel 和滚动条居中的帖子,但是将这两种复杂性加在一起,事情可能会更复杂一些,因为我还没有找到解决方案。
我真正想要实现的是将画布'JPanel 固定为用户可能指定的任何大小并居中,以及滚动条的行为就像人们在心爱的窗口中所期望的那样'油漆:
你会如何做这个/修复我的设计?任何帮助将不胜感激!
附:新年快乐:)
【问题讨论】: