MiGLayout不会扩展JPanel

我相信你们当中有些人都知道,我正试图为Tiled制作一个开源的工具。 我之前问过我应该使用什么布局,我建议我真正喜欢的MiGLayout,但是根本不理解。 我也希望从中学到一些东西。 我想要的是有人向我解释我做错了什么,显然,以及我需要做些什么来纠正这个问题。

让我首先陈述一下在我眼中最完美的东西,但可能不是真的。

  • 的JFrame
  • 菜单和菜单项

现在让我说出我不喜欢的东西,而不是屈从于我的意志。

  • JToolBar(我不想要的空白,它们用红色圈出)
  • 两个JPanels(宽度很好,但它们没有填充到高度)

我的问题是我该 怎么 做才能解决这个问题如何调整miglayout以便在移动工具栏时不会使布局崩溃?

这是我的代码:

package main; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JToolBar; import javax.swing.KeyStroke; import net.miginfocom.swing.MigLayout; public class GUI extends JFrame { // Window Vars // String title; int width; int height; // Mid Level componets // JMenuBar menuBar; JMenu file; JToolBar toolBar; JPanel map; JPanel sideBar; // Low Level componets // JMenuItem exit; JButton select; public GUI(String title, int width, int height) { this.title = title; this.width = width; this.height = height; this.makeInterface(); } public void makeInterface() { // Setup JFrame this.setTitle(title); this.setSize(width, height); this.setLocationRelativeTo(null); this.setMinimumSize(new Dimension(700, 500)); this.setVisible(true); this.setLayout(new MigLayout( "debug, fillx, gap unrel rel", // Layout "[grow, fill][fill]", // Column "[fill][fill]")); // Row this.makeMenu(); this.addToolBars(); this.makePanels(); this.setupActionListeners(); } public void makeMenu() { this.menuBar = new JMenuBar(); this.file = new JMenu("File"); this.file.setMnemonic(KeyEvent.VK_F); this.menuBar.add(file); this.exit = new JMenuItem("Exit", KeyEvent.VK_E); this.exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.ALT_MASK)); this.file.add(exit); this.setJMenuBar(this.menuBar); } public void addToolBars() { this.toolBar = new JToolBar("Draggable"); this.addToolBarButtons(); this.add(toolBar, "span, height 20:35:50, wrap"); } public void addToolBarButtons() { this.select = new JButton("Select"); this.toolBar.add(select); } public void makePanels() { this.map = new JPanel(); this.sideBar = new JPanel(); this.add(map, "width 400:600:, flowy, growy"); this.add(sideBar, "width 250:300:350, flowy, growy"); } public void setupActionListeners() { this.exit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); } } 

程序处于当前状态

需要使用停靠function在区域中设置侧边栏和地图区域。

例如,我做了如下:

 this.setLayout(new MigLayout( "fill", // Layout "", // Column "")); // Row this.add(map, "width 400:600:, dock center, growy"); this.add(sideBar, "width 250:300:350, dock east, growy"); 

这消除了差距,并根据需要扩展了一切。