我有一个工具栏,其中按钮的数量从两个到二十不等。每个按钮的宽度可以变化。
我必须将它们全部放在顶部并使用JToolBar。在较小的屏幕分辨率(例如800x600)上,某些按钮可能不在屏幕上(AFAIK JToolbar不能增加高度)。
有什么想法如何调整JToolbar以使其高度增加或以任何其他方式(例如使用Flowlayout)解决任务?
答案 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 个按钮。另外,每个工具栏的按钮数量也可以通过按钮的总宽度来确定。