1到@aymeric评论.
What about having two different JLabels
但是我明白为什么你会犹豫不决
negative: requires maintenance of 2 labels.
我聪明的(:P)解决方案是创建你自己的抽象组件 – 它接受图标和文本作为构造函数的参数 – 通过扩展JPanel而不是向JPanel添加2个JLabel,每个标签都有一个调用抽象方法xxxClicked的MouseAdapter( )(因此任何实现类都必须覆盖这些方法).
这是我做的一个例子:
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {