gpt4 book ai didi

java - 重写 setPreferredSize() 和 getPreferredSize()

转载 作者:行者123 更新时间:2023-12-01 18:52:37 25 4
gpt4 key购买 nike

根据我收到的答案,我现在采用不同的方式进行此操作。

是否有任何方法可以重写 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 为例;

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

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

关于java - 重写 setPreferredSize() 和 getPreferredSize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15308487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com