java - 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));
}
}
推荐阅读
- python - 按日期订购帖子
- decode - 从通过 webRequest FilterResponseData StreamFilter 传递的 TypedArray 缓存数据中解码字符串
- angular - 为什么 ViewChildren() 不能按属性工作?
- arrays - 检查某些数组值是否相等
- c# - 从一个表单显示标签到另一个表单
- maven - SeleniumWebdriver +TestNG:并行执行的多个类的 testNg 执行中的不稳定行为
- php - 如何将上传文件路径设置为不同的url
- javascript - Npm 安装不适用于 ionic 3,npm ERR!代码 Z_BUF_ERROR
- android - 找不到 Android 9.0 (Pie) API 28 ARM 系统映像
- c# - 从 URL 获取 HTML - StreamReader 使用另一种字符编码?