0

我的一个面板中有一个JToolbar

精简代码:

//for the containing panel
panel.setLayout(new BorderLayout());


//adding the toolbar
panel.add(toolbar, BorderLayout.WEST);

工具栏有两个JButton我添加的 sGridBagLayout用于使它们具有相等的宽度

//工具栏代码

toolbar=new JToolbar();
toolbar.setLayout(new GridBagLayout());
btn1 = new JBUtton("update layout");
btn2 = new JButton("exit!");
GridBagContraints gbc = new GridBagConstraints();
gbc.gridx=0;
gbc.gridy=1;
gbc.fill = GridBagConstrainsts.HORIZONTAL;
toolbar.add(btn1,gbc);
gbc.gridy=1;
toolbar.add(btn1,gbc);

此代码呈现一个带有等宽按钮的垂直工具栏。唯一的问题是工具栏的高度大于按钮的高度,因此此代码将按钮呈现在工具栏的垂直中心。相反,我希望按钮与顶部对齐,以便将所有空白空间添加到工具栏的末尾。

现在:

 ----------
 |        |
 ----------
 |  btn   |
 ----------
 |  btn2  |
 ----------
 |        |
 ----------

我想要的是

 ----------
 |   btn  |
 ----------
 |   btn2 |
 ----------
 |        |
 ----------
 |        |
 ----------
4

2 回答 2

0

我认为您可以只Box.createVerticalGlue()向工具栏添加一个,而无需将布局更改为 GridBagLayout。这将填满按钮后的剩余空间并将它们推到顶部。

于 2012-07-31T00:06:40.797 回答
0

有点像死人复活的感觉。但是我有一个非常相似的问题并找到了解决方案,所以为什么不分享它:

您必须为按钮设置最大尺寸,否则最大尺寸由 ButtonUI 计算。并将 setHorizo​​ntalAlignment 设置为 SwingConstants.RIGHT 以使按钮内容对齐:

public class JToolBarPractise extends JFrame {

  public JToolBarPractise() {
    super();
    addWindowListener(new WindowAdapter() {

      public void windowClosing(WindowEvent we) {
        System.exit(0);
      }
    });
    JPanel contentPanel = new JPanel(new BorderLayout());
    JToolBar toolBar = new JToolBar(SwingConstants.VERTICAL);
    JButton button1 = new JButton("Update Layout!");
    button1.setHorizontalAlignment(SwingConstants.RIGHT);
    button1.setMaximumSize(new Dimension(Short.MAX_VALUE, button1.getPreferredSize().height));
    toolBar.add(button1);
    JButton button2 = new JButton("Exit!");
    button2.setHorizontalAlignment(SwingConstants.RIGHT);
    button2.setMaximumSize(new Dimension(Short.MAX_VALUE, button2.getPreferredSize().height));
    button2.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent ae) {
        System.exit(0);
      }
    });
    toolBar.add(button2);
    contentPanel.add(toolBar, BorderLayout.WEST);
    getContentPane().add(contentPanel);
  }

  public static void main(String[] args) throws ClassNotFoundException, InstantiationException,
    IllegalAccessException, UnsupportedLookAndFeelException {
    JToolBarPractise main = new JToolBarPractise();
    main.setSize(300, 300);
    main.setVisible(true);
  }
}
于 2019-12-13T16:30:19.260 回答