摆动:多行工具栏或将Flowlayout用作工具栏

时间:2018-07-31 05:05:36

标签: java swing user-interface flowlayout jtoolbar

我有一个工具栏,其中按钮的数量从两个到二十不等。每个按钮的宽度可以变化。

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

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

3 个答案:

答案 0 :(得分:1)

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

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));
    }
}

答案 1 :(得分:0)

我不确定这是否有帮助,您如何使用功能区栏呢?这样,它对用户来说就不那么复杂了(如果您有超过7个按钮),并且看起来很有效。要实现,请执行以下操作(一个运行中的示例):创建一个JTabbedPane并添加以下选项卡 File Edit Help 。在文件中,具有新项目打开保存另存为。在编辑中,具有复制,粘贴等。

答案 2 :(得分:0)

此解决方案不使用JToolBar,而是使用带有多个按钮的GridLayout。该程序接受n个按钮并将它们放置在容器中。每行的列(或按钮)数是恒定的,并且行数根据按钮数而增加。

例如,如果一行容纳8列或按钮,则将12个按钮放置在两行中。这是一些代码,显示可能的结果。请注意,该程序接受整数(按钮数)作为命令行参数。

import javax.swing.*;
import java.awt.*;
public class ToolbarGrid {
    private static final int MAX_BUTTONS_PER_ROW = 4;
    public static void main(String [] args) throws Exception {
        if (args.length == 0) {
            System.out.println("Enter number of buttons as arg> java -cp . ToolbarGrid 9");
            return;
        }
        int noOfButtons = Integer.parseInt(args[0]);
        JFrame frame = new JFrame();
        frame.setTitle("Testing Toolbar in a Grid");
        GridLayout gLayout = new GridLayout(0, MAX_BUTTONS_PER_ROW); // 0 rows = any number of rows
        JPanel panel = new JPanel();
        panel.setLayout(gLayout);
        panel = panelWithButtons(noOfButtons, panel);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.pack();       
        frame.setVisible(true);
    }
    private static JPanel panelWithButtons(int noOfButtons, JPanel panel) {
        for (int i = 0; i < noOfButtons; i++) {
            panel.add(new JButton("Button_" + i+1));
        }
        return panel;
    }
}


编辑:以类似的方式,可以使用多个工具栏。每个工具栏限制 n 个按钮。另外,每个工具栏的按钮数量也可以通过按钮的总宽度来确定。