Swing:多行工具栏或使用Flowlayout作为工具栏



我有一个工具栏,里面有从两个到二十个的随机按钮。每个按钮的宽度可能不同。

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

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

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

我不确定这是否有帮助,不如使用ribbonbar?这样,它对用户来说就不那么复杂了(如果你有7个以上的按钮(,而且看起来很高效。实现如下(动态示例(:创建一个JTabbedPane并添加以下选项卡FileEditHelp。在文件中,有新项目打开保存另存为。。。在编辑中,有复制、粘贴等。等等。

此解决方案不使用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按钮的数量。此外,每个工具栏的按钮数量也可以由按钮的总宽度来确定。

相关内容

  • 没有找到相关文章