gpt4 book ai didi

java - 将 JButton 设置移至单独的类

转载 作者:行者123 更新时间:2023-12-01 12:15:42 24 4
gpt4 key购买 nike

我有一个创建一系列 JButton 的循环。这段代码被深深地埋在一个主要与多线程相关的类中,因此它使用了 Executors、Callables、Futures 等。我试图保持这个类的封装性,所以我想将设置JButton 属于它自己的类。这是我的循环的主体,它创建了一个按钮。它工作得很好:

    JButton imageButton = new JButton(new ImageIcon(image));
imageButton.setMinimumSize(imageSize);
imageButton.setPreferredSize(imageSize);
imageButton.setMaximumSize(imageSize);
imageButton.setVisible(true);

imageButton.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(java.awt.event.MouseEvent mouseEvent) {
// do a bunch of stuff }
}

@Override
public void mouseMoved(java.awt.event.MouseEvent mouseEvent) {}
});

imagesPanel.add(imageButton);

这只会变得更困惑,所以我尝试将它移到一个单独的类中:

ImageButton imageButton = new ImageButton(image, imageSize);
imageButton.addMouseMotionListener();
imagesPanel.add(imageButton);

这是我的课:

public class ImageButton extends JButton {

JButton button;
static final long serialVersionUID = 1;

public ImageButton(Image image, Dimension imageSize) {
button = new JButton(new ImageIcon(image));
button.setMinimumSize(imageSize);
button.setPreferredSize(imageSize);
button.setMaximumSize(imageSize);
button.setVisible(true);
}

public void addMouseMotionListener() {
button.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(java.awt.event.MouseEvent mouseEvent) {
// do a bunch of stuff
}

@Override
public void mouseMoved(java.awt.event.MouseEvent mouseEvent) {}
});
}
}

这一切都编译没有错误,无论什么值(value)。按钮布局在适当的尺寸和适当的位置。但是,图像没有出现(按钮为空白)并且鼠标监听器不起作用。谁能看到我做错了什么以及如何使这项工作成功?

最佳答案

您的ImageButton类是错误的。你在里面持有一个不必要的 JButton 实例。因此,实现应该是:

public class ImageButton extends JButton {

static final long serialVersionUID = 1;

public ImageButton(Image image, Dimension imageSize) {
super(new ImageIcon(image));
this.setMinimumSize(imageSize);
this.setPreferredSize(imageSize);
this.setMaximumSize(imageSize);
this.setVisible(true);
}

public void addMouseMotionListener() {
this.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(java.awt.event.MouseEvent mouseEvent) {
// do a bunch of stuff
}

@Override
public void mouseMoved(java.awt.event.MouseEvent mouseEvent) {}
});
}
}

这样,您就可以将参数设置为类而不是成员,并且 ImageButton 的所有实例都将具有相同的配置。

关于java - 将 JButton 设置移至单独的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27022650/

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