首页 > 解决方案 > Swing:多行工具栏或使用 Flowlayout 作为工具栏

问题描述

我有从两个到二十个随机按钮的工具栏。每个按钮的宽度可以变化。

我必须将它们全部放在顶部区域并使用 JToolBar。在小屏幕分辨率(例如 800x600)上,一些按钮可能不在屏幕上(AFAIK JToolbar 不能在高度上增长)。

任何想法如何调整 JToolbar 以增加高度或以任何其他方式解决任务(例如使用 Flowlayout)?

标签: javaswinguser-interfaceflowlayoutjtoolbar

解决方案


JToolBar 可以在设置添加的组件 preferredSize 时增加高度。这是一个例子:

package toolbar;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;

public class ToolbarTest extends JFrame {
    private static final long serialVersionUID = 1L;

    private int n = 1;

    public ToolbarTest() {
        super(ToolbarTest.class.getName());
        JToolBar tb = new JToolBar();
        tb.add(new AbstractAction("First Action") {
            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                String text = "";
                for (int i = 0; i < n; i++) {
                    text += "Button - " + i + "<br>";
                }
                n++;
                JButton b = new JButton("<html>" + text + "</html>");
                tb.add(b);
                ToolbarTest.this.doLayout();
                ToolbarTest.this.pack();
            }
        });
        getContentPane().add(tb, BorderLayout.NORTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
    }

    public static void main(String[] args) {
        ToolbarTest tbt = new ToolbarTest();
        SwingUtilities.invokeLater(() -> tbt.setVisible(true));
    }
}

推荐阅读