Java Swing主框架添加JScrollPane滚动面板的实现方法咨询
Java Swing 添加JScrollPane滚动面板实现方案
首先给出修正原有代码问题、加入JScrollPane后的完整可运行代码:
import javax.swing.*; import java.awt.event.*; import java.awt.*; import javax.swing.JTextField; public class GUIAE2 extends JFrame implements ActionListener{ private JTextField area; private JLabel label2; // 修正原有变量定义的分隔符错误,把分号改为逗号 private JButton buton1,buton2,buton3,buton4,buton5,buton6,buton7,buton8,buton9,buton10,buton11; private JScrollPane sp1; public GUIAE2(){ // 主窗口使用BorderLayout,滚动面板可自动适配窗口大小 setLayout(new BorderLayout()); setTitle("ejercicios java"); getContentPane().setBackground(new Color(0,0,0)); // 1. 创建承载所有可滚动组件的内容面板,内部保留null布局摆放组件 JPanel contentPanel = new JPanel(); contentPanel.setLayout(null); contentPanel.setBackground(new Color(0,0,0)); buton1 = new JButton("Ejercicio 1 (Expresiones regulares)"); // 调整按钮坐标适配初始窗口大小 buton1.setBounds(30,40,280,60); buton1.setBackground(new Color (0,0,224)); buton1.setFont(new Font("andale mono",1,14)); buton1.setForeground(new Color(0,0,0)); buton1.addActionListener(this); // 组件添加到内容面板,不要直接添加到JFrame contentPanel.add(buton1); // 其余按钮可按此逻辑继续添加,仅调整y轴坐标即可,比如buton2.setBounds(30, 120, 280, 60) // 2. 给内容面板设置首选大小,尺寸大于窗口可视区域时才会触发滚动 // 可根据实际组件总量调整宽高,此处假设共11个按钮,预留足够的滚动高度 contentPanel.setPreferredSize(new Dimension(800, 900)); // 3. 初始化滚动面板,传入内容面板 sp1 = new JScrollPane(contentPanel); // 设置滚动条显示策略:需要时自动显示 sp1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); sp1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); // 4. 滚动面板添加到主窗口中心区域,自动铺满窗口 add(sp1, BorderLayout.CENTER); } public void actionPerformed(ActionEvent e){ } public static void main(String args[]){ GUIAE2 ventanabienvenida = new GUIAE2(); ventanabienvenida.setBounds(0,0,350,450); ventanabienvenida.setVisible(true); ventanabienvenida.setResizable(true); ventanabienvenida.setLocationRelativeTo(null); } }
关键实现说明
- JScrollPane本身是容器,不能直接把组件加到滚动面板里,需要先把所有需要滚动展示的组件放到一个独立的
JPanel(即上述代码的contentPanel)中,再将这个面板传入滚动面板构造方法 - 必须给承载组件的内容面板设置
preferredSize属性,滚动面板会根据这个属性判断是否需要显示滚动条,该尺寸需要大于窗口的可视区域 - 如果要保留主窗口的null布局,不需要改主窗口布局,只需要给滚动面板手动设置bounds即可:
sp1.setBounds(0,0,350,450);,窗口缩放时需要自行监听窗口大小事件调整滚动面板的尺寸
内容的提问来源于stack exchange,提问作者Ximone Agustin
相关产品推荐
相关产品推荐

