Java swing 关于frame窗口布局的实例代码
·
import javax.swing.*;
import java.awt.*;
public class M1 {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
// 1. 创建主窗口
JFrame frame = new JFrame("上-下(下分左右)布局+滚动示例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 500);
// 2. 外层容器:实现“上-下”结构(用BorderLayout)
JPanel outerPanel = new JPanel(new BorderLayout(8, 8)); // 区域间距8像素
// -------------------- 上部分区域 --------------------
JPanel topPanel = new JPanel();
topPanel.add(new JLabel("上部分区域 - 标题/筛选栏"));
topPanel.setPreferredSize(new Dimension(580, 120)); // 固定高度(触发垂直超限)
topPanel.setBackground(Color.LIGHT_GRAY);
outerPanel.add(topPanel, BorderLayout.NORTH);
// -------------------- 下部分容器(分左右) --------------------
JPanel bottomContainer = new JPanel(new BorderLayout(8, 8)); // 下部分的左右分栏容器
// 下左区域:多内容组件(触发滚动)
JPanel bottomLeft = new JPanel();
bottomLeft.setLayout(new BoxLayout(bottomLeft, BoxLayout.Y_AXIS)); // 垂直排列
for (int i = 1; i <= 25; i++) {
bottomLeft.add(new JLabel("下左列表项 " + i));
bottomLeft.add(Box.createVerticalStrut(5)); // 间距
}
bottomLeft.setPreferredSize(new Dimension(300, 400)); // 固定宽度
bottomLeft.setBackground(Color.yellow);
bottomContainer.add(bottomLeft, BorderLayout.WEST);
// 下右区域:多按钮组件(触发滚动)
JPanel bottomRight = new JPanel();
bottomRight.setLayout(new BoxLayout(bottomRight, BoxLayout.Y_AXIS)); // 垂直排列
for (int i = 1; i <= 25; i++) {
bottomRight.add(new JButton("下右操作按钮 " + i));
bottomRight.add(Box.createVerticalStrut(5)); // 间距
}
bottomRight.setPreferredSize(new Dimension(300, 400)); // 固定宽度
bottomContainer.add(bottomRight, BorderLayout.EAST);
// 将下部分容器加入外层的“下”区域(BorderLayout.CENTER)
outerPanel.add(bottomContainer, BorderLayout.CENTER);
bottomRight.setBackground(Color.RED);
// 3. 无参JScrollPane绑定外层容器(关键:必须设置视口内容)
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(outerPanel); // 整体布局容器作为滚动面板的内容
// 4. 配置滚动条策略(按需显示垂直/水平滚动条)
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
// 5. 将滚动面板添加到主窗口
frame.add(scrollPane, BorderLayout.CENTER);
// 显示窗口
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
更多推荐


所有评论(0)