首页 > java_swing 中为什么有的组件设置setPreferedsize()不起作用?

java_swing 中为什么有的组件设置setPreferedsize()不起作用?

将JList放在ScrollPane中,想设置ScrollPane的大小,发现使用setPreferedsize()无法更改?contentPane使用的是BorderLayout
效果如下:

使用setPreferedsize()没有变化,请问如何更改左边区域的大小
代码如下(用windowbuilder生成)

package com.pop1;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JLabel;
import javax.swing.ScrollPaneConstants;

public class List extends JFrame {

    private JPanel contentPane;
    JLabel label = null;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    List frame = new List();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public List() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        //创建内容窗格
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        //创建JList
        String[] model = { "唱歌", "听音乐", "看书", "玩电脑", "踢足球", "唱歌", "听音乐", "看书",
                "玩电脑", "踢足球", "唱歌", "听音乐", "看书", "玩电脑", "踢足球" };
        JList list = new JList(model);
        list.setValueIsAdjusting(true);
        //将Jlist放在scrollPane中
        JScrollPane scrollPane = new JScrollPane(list);
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setPreferredSize(new Dimension(20, 20));   //为什么不起作用?
        contentPane.add(scrollPane, BorderLayout.CENTER);

        label = new JLabel("\u6CA1\u6709\u4EFB\u4F55\u9009\u62E9");
        contentPane.add(label, BorderLayout.EAST);
    }
    
}

contentPane.add(scrollPane, BorderLayout.CENTER);
把组件加到BorderLayout.CENTER的时候,大小是被托管的,非得加到BorderLayout.CENTER的话,只能改变contentPane的大小。
其它办法就是不指定contentPane的布局。

【热门文章】
【热门文章】