java label点击_java – JLabel鼠标单击图标或文本

本文介绍了如何创建一个自定义的`MyLabel`组件,该组件继承自`JPanel`,并在构造时接受图标和文本参数。通过添加两个`JLabel`(一个用于图标,一个用于文本)并分别设置`MouseAdapter`,实现了当用户点击图标或文本时触发不同的事件。示例代码展示了如何监听并响应点击事件。
摘要由CSDN通过智能技术生成

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() {

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ImageIcon ii = null;

try {

//I dont remmend getScaledInstance just used it for speed of code writing

ii = new ImageIcon(ImageIO.read(new URL("http://www.candonetworking.com/java.gif")).getScaledInstance(32, 32, Image.SCALE_SMOOTH));

} catch (Exception ex) {

ex.printStackTrace();

}

MyLabel ml = new MyLabel(ii, "Something") {

@Override

void iconClicked() {

System.out.println("Icon clicked");

}

@Override

void textClicked() {

System.out.println("Text clicked");

}

};

frame.add(ml);

frame.pack();

frame.setVisible(true);

}

});

}

}

abstract class MyLabel extends JPanel {

JLabel iconLabel;

JLabel textLabel;

MouseAdapter iconMA;

MouseAdapter textMA;

public MyLabel(ImageIcon icon, String text) {

iconLabel = new JLabel(icon);

textLabel = new JLabel(text);

iconMA = new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent me) {

super.mouseClicked(me);

iconClicked();

}

};

textMA = new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent me) {

super.mouseClicked(me);

textClicked();

}

};

iconLabel.addMouseListener(iconMA);

textLabel.addMouseListener(textMA);

add(iconLabel);

add(textLabel);

}

abstract void iconClicked();

abstract void textClicked();

public JLabel getIconLabel() {

return iconLabel;

}

public JLabel getTextLabel() {

return textLabel;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值