由于收到的答复,我现在以不同的方式进行此操作。

是否有任何方法可以覆盖setPreferredSize()和getPreferredSize(),以便它将组件的大小实际设置为大于实际输入的数字,并获得小于实际数字的数字?

在这里,我重写了这两种方法,以将面板的尺寸设置为比我实际在setPreferredSize()中设置的尺寸大100像素,如果要获得首选尺寸,我希望它返回我在setPreferredSize()中设置的尺寸。

我怀疑Swing使用getPreferredSize()来设置大小,所以是否可以重写另一种方法来实现此目的,还是我不得不制作另一种方法来返回所需的值?

import java.awt.*;
import java.beans.Transient;
import javax.swing.*;

public class PreferredSize extends JPanel{

public static void main(String[] args) {
    JPanel background = new JPanel();

    PreferredSize ps = new PreferredSize();
    ps.setPreferredSize(new Dimension(200, 200));
    ps.setBackground(Color.CYAN);

    JPanel panel = new JPanel();
    panel.setBackground(Color.BLUE);
    panel.setPreferredSize(new Dimension(200, 200));


    background.add(ps);
    background.add(panel);

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setContentPane(background);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}


@Override
public void setPreferredSize(Dimension preferredSize) {
    super.setPreferredSize(new Dimension(preferredSize.width+100, preferredSize.height+100));
}

@Override
@Transient
public Dimension getPreferredSize() {
    return new Dimension(super.getPreferredSize().width-100, super.getPreferredSize().height-100);
}
}


谢谢。

最佳答案

您面临的问题是,首选尺寸只是布局管理者可以用来决定组件布局方式的指南。布局经理忽略这些提示是完全合理的。

在ip的情况下,您的示例;


JPanel的默认大小为0x0,因此,在您添加和减去100个像素时,其大小再次变为0x0。
JFrame的默认布局管理器是BorderLayout,如果可用大小大于或小于首选大小指定的大小,它将忽略首选大小


真正的问题是,您实际要实现什么目标?

09-30 23:41