将固定大小的画布居中放在JFrame中

时间:2017-01-02 20:17:39

标签: java swing layout

我正在创建一个电路编辑器(类似于任何带有基本菜单和具有可指定尺寸的画布的常规绘图软件)。我目前正在尝试将以前不可滚动的画布(JPanel)转换为可滚动的画布。

Circuit Editor

目前显而易见的设计错误是,由于画布{{1},滚动条似乎正确反映了画布的内部大小(当然可能比JFrame大) }被添加到主面板JPanel的{​​{1}}中,它始终会与CENTER一起调整大小。

BorderLayout

我已经阅读了很多关于将JPanels和滚动条集中在一起的帖子,但是这两个复杂性加在一起,事情可能会有点复杂,因为我还没有找到解决方案。

我真正想要实现的是拥有画布' JFrame固定在用户可能已指定的任何大小并居中于中间,以及滚动条的行为与在心爱的窗口中所期望的一样。漆:

enter image description here

你会怎么做/修理我的设计?任何帮助将不胜感激!

P.S。新年快乐:)

1 个答案:

答案 0 :(得分:1)

  

JPanel修复了用户可能指定的任何大小并居中于中间以及滚动条的行为符合预期

因此,您需要嵌套面板,以便画布面板可以按其首选大小显示,而父面板可以根据框架的大小调整大小。

一种简单的方法是JPanel使用GridBagLayout。然后使用默认的GridBagConstraints将画布面板添加到此面板。

所以小组的基本结构是:

JPanel canvas = new JPanel();
canvas.setPreferredSize( new Dimension(300, 300) );
canvas.setBackground(Color.RED);

JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add(canvas, new GridBagConstraints() );

frame.add(new JScrollPane(wrapper));

注意:您的“masterPanel”不需要。 JFrame的内容窗格的默认布局管理器是BorderLayout,因此您只需将“menuPanel”和“scrollPane”直接添加到具有正确BorderLayout约束的框架中。 / p>