gpt4 book ai didi

java - 如何在 JComponent 的子类中使用 setPreferredSize(...) ?

转载 作者:行者123 更新时间:2023-12-01 13:29:28 25 4
gpt4 key购买 nike

我正在尝试构建自己的 JComponent,但一开始并不理想。我可以创建一个对象,然后将其添加到 JFrame 或 JPanel,它将添加到组件列表中。我不知道如何设置PreferredSize()。

问题:如何设置 setPreferedSize() 以及它在创建对象时是否自动将这个特定大小设置给该对象的所有实例

    **@Override
public void setPreferredSize(Dimension preferredSize) {
super.setPreferredSize(preferredSize);
}**

类(class):

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;

public class myComponent extends JComponent {
private static final long serialVersionUID = 1L;

public myComponent() {
setPreferredSize(new Dimension(20,50));
setToolTipText(new String("This is a custom buttion"));
}

**@Override
public void setPreferredSize(Dimension preferredSize) {
super.setPreferredSize(preferredSize);
}**

@Override
public void setToolTipText(String text) {
super.setToolTipText(text);
}

@Override
public void paintComponent(Graphics g) {
g.drawString("I love pizza", 100, 100);
g.drawRect(10, 10, 200, 200);
}

public static void main(String[] args) {
myComponent t = new myComponent();
}
}

最佳答案

当你打电话时

setPreferredSize(new Dimension(20,50));

在构造函数中,那么类的所有实例都将具有此首选大小(当然,只要它们使用此构造函数)。

顺便说一句:重写一个方法并仅调用该方法的 super 版本并没有真正意义(只要您不将可见性从 protected 增加到public 左右...)。唯一没有调用 super 版本的方法是您实际应该调用的方法:通常,您将 paintComponent 重写为

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

// Your drawing here...
}

顺便说一句:不要使用new String("foo")。所以这条线

setToolTipText(new String("This is a custom buttion"));

应该是

setToolTipText("This is a custom buttion");

编辑:也许有人也应该提到这一点:Swing 中“首选大小”背后的意图略有不同。通常,扩展 JComponent 的类具有“内在”首选大小。在您的例子中,这可能是 (220, 220),因为您想要绘制一个边距为 10 像素的 200x200 矩形。但是,此组件的用户应该能够通过调用 setPreferredSize 并传入所需的大小来修改此首选大小。但是当他们调用setPreferredSize(null)时,则应再次使用原始的“固有”首选大小。因此,为了确保正确处理首选大小,您可以/应该像这样实现这些方法:

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;

public class myComponent extends JComponent {
private static final long serialVersionUID = 1L;

public myComponent() {
// setPreferredSize(new Dimension(20,50)); Don't call this here!
setToolTipText(new String("This is a custom buttion"));
}

@Override
public Dimension getPreferredSize() {
if (super.isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(220,220); // or (20,50), just as you want...
}

...
}

关于java - 如何在 JComponent 的子类中使用 setPreferredSize(...) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654127/

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