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

发布于 2022-09-01 21:46:43 字数 2294 浏览 17 评论 0

将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);
    }
    
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一萌ing 2022-09-08 21:46:43

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文