gpt4 book ai didi

java - 如何外部化 MouseListener?

转载 作者:行者123 更新时间:2023-11-30 08:05:27 25 4
gpt4 key购买 nike

(注意:我知道 MouseAdapter 类的存在,但由于我稍后可能会覆盖所有方法,所以它的优势就消失了吗? )

我有一个 MainProgram.java 类,我在其中添加了几个组件。他们中的大多数都有一个监听器(ActionListener、MouseListener 等),在我的主类中这有点拥挤。

因此,我试图将这些听众“外化”到他们自己的类(class)中。到目前为止,我在我的主类中使用了内部类,这使得访问变量、组件……非常简单和直接。

但是对于外部监听器,我不确定实现它们的最佳方式是什么。

例如,当我想知道点击了哪个标签时,我正在获取事件,获取事件源,将其转换为 JLabel,然后获取我比较字符串的标签上的文本!

这可行,但似乎很容易出错(如果我在主类中更改 JLabel 文本怎么办?-> 监听器中断)并且非常不干净。

我试图通过谷歌和 StackOverflow 搜索更好的方法来执行此操作,但只找到了内部类方法。

那么有没有更好的方法来访问我的组件/外部化我的听众?

public class MainProgram extends JFrame {
public MainProgram() {
super("Landing Page");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel westPanel = new JPanel();

JLabel lbl_orderStatus = new JLabel("Order Status");
JLabel lbl_technicalDocu = new JLabel("Technical Documentation");
JLabel lbl_checkReport = new JLabel("Check Report");

MouseListenerBoldFont mouseListenerLabelBoldPlain = new MouseListenerBoldFont();

lbl_orderStatus.addMouseListener(mouseListenerLabelBoldPlain);
lbl_technicalDocu.addMouseListener(mouseListenerLabelBoldPlain);
lbl_checkReport.addMouseListener(mouseListenerLabelBoldPlain);

westPanel.add(lbl_orderStatus);
westPanel.add(lbl_technicalDocu);
westPanel.add(lbl_checkReport);
add(westPanel);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
MainProgram window = new MainProgram();
window.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}

MouseListenerBoldFont.java:

public class MouseListenerBoldFont implements MouseListener{

Object lbl_westPanel;

@Override
public void mouseClicked(MouseEvent e) {
if(((JLabel)e.getSource()).getText().equals("Order Status")){
System.out.println("Order Status clicked");
};
if(((JLabel)e.getSource()).getText().equals("Technical Documentation")){
System.out.println("Technical Documentation clicked");
};
if(((JLabel)e.getSource()).getText().equals("Check Report")){
System.out.println("Check Report clicked");
};
}

@Override
public void mouseEntered(MouseEvent e) {
lbl_westPanel = e.getSource();
((JComponent) lbl_westPanel).setFont(new Font("tahoma", Font.BOLD, 12));
}

@Override
public void mouseExited(MouseEvent e) {
lbl_westPanel = e.getSource();
((JComponent) lbl_westPanel).setFont(new Font("tahoma", Font.PLAIN, 11));
}

@Override
public void mousePressed(MouseEvent e) {
}

@Override
public void mouseReleased(MouseEvent e) {
}
}

最佳答案

确定这不是最好的方法,但可能对您的问题有用

public class MyLabel extends JLabel implements MouseListener {
public MyLabel() {
addMouseListener(this);
}
public MyLabel(String txt) {
super(txt);
addMouseListener(this);
}
public void mouseClicked(MouseEvent e) {
System.out.println(getText() + " clicked");
}
public void mouseEntered(MouseEvent e) {
setFont(new Font("tahoma", Font.BOLD, 12));
}
public void mouseExited(MouseEvent e) {
setFont(new Font("tahoma", Font.PLAIN, 11));
}
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
}

然后

    JLabel lbl_orderStatus = new MyLabel("Order Status");
JLabel lbl_technicalDocu = new MyLabel("Technical Documentation");
JLabel lbl_checkReport = new MyLabel("Check Report");

// MouseListenerBoldFont mouseListenerLabelBoldPlain = new MouseListenerBoldFont();
//
// lbl_orderStatus.addMouseListener(mouseListenerLabelBoldPlain);
// lbl_technicalDocu.addMouseListener(mouseListenerLabelBoldPlain);
// lbl_checkReport.addMouseListener(mouseListenerLabelBoldPlain);

关于java - 如何外部化 MouseListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35040596/

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