java - Java Swing中的面板向左浮动并带有垂直条
问题描述
我如何创建一个JPanel
有很多按钮向左对齐并且只有垂直滚动条的?
按钮应按如下排序。
1 2 3 4 5 6 7 8 9 10 11 12
解决方案
如果您使用GridLayout
,那么您将无法添加滚动窗格,因为它会自动调整大小以适应其中的所有组件。一种更简单的方法是使用 aFlowLayout
和setPreferredSize(...)
设置面板的大小。虽然不建议设置面板的大小,但您仍然需要以某种方式使用滚动条。这是一个MCVE
:
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Example extends JFrame {
private final int BUTTON_WIDTH = 100;
private final int BUTTON_HEIGHT = 50;
private final int BUTTON_ROWS = 3;
private final int BUTTON_COLUMNS = 4;
private final int OFFSET = 20;// the width of the actual scroll bar in pixels (approximately).
private final int PANEL_WIDTH = BUTTON_WIDTH * BUTTON_COLUMNS + OFFSET;
private final int PANEL_HEIGHT = BUTTON_HEIGHT * BUTTON_ROWS + OFFSET;
private final int SCROLL_HEIGHT = 100;//or whatever you would like...
private final JButton[] buttons = new JButton[BUTTON_ROWS * BUTTON_COLUMNS];
public Example() {
JPanel panel = new JPanel(new FlowLayout());
JScrollPane scroll = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
panel.setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
scroll.setPreferredSize(new Dimension(PANEL_WIDTH + OFFSET, SCROLL_HEIGHT));
for (int i = 0; i < buttons.length; i++) {
JButton button = new JButton((i + 1) + "");
buttons[i] = button;
button.setPreferredSize(new Dimension(BUTTON_WIDTH, BUTTON_HEIGHT));
panel.add(button);
}
//if you want the panel to resize when window is stretched.
//setLayout(new FlowLayout(FlowLayout.CENTER));
add(scroll);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Example();
}
}
推荐阅读
- c++ - 设置用于创建随机数的最大值和最小值
- python - 我收到一条错误消息,提示 IndexError: index 0 is out of bounds for axis 0 with size 0
- java - Java:如何用包含坐标的数组填充二维矩阵?
- python - 使用python将子字符串列表查找到字符串列表中
- python - Python post请求返回url而不是base64字符串
- python - 我如何让这个公式起作用并将返回函数放入打印语句中,以便它只输出一个货币值?
- c# - 是否有用于 ed25519 签名验证的 Microsoft 库?
- vb.net - 代码隐藏中的 ASP DropDownList selectedIndex 不正确
- ios - iOS 12 中的视图层次结构中缺少 searchBar
- python - Fabric 2 在 git pull 远程服务器时自动部署错误。未找到存储库