如何通过单击鼠标来聚焦 JLabel?

How can I focus a JLabel with a mouse click?

我正在做一个带有 3 个标签的计算器,我不能使用文本字段,我想知道如何通过单击来聚焦 JLabel

只需通过 myLabel.setFocusable(true); 使 JLabel 可聚焦。然后它将在单击时获得焦点。您可以通过多种方式通知观察者其状态,包括为标签分配边框,或更改其文本字体或颜色或背景颜色(但随后您需要使标签不透明)

例如,

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

@SuppressWarnings("serial")
public class JLabelFocus extends JPanel {
    private String[] labelTexts = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};

    public JLabelFocus() {
        setPreferredSize(new Dimension(400, 200));
        for (String text : labelTexts) {
            JLabel label = new JLabel(text);
            label.setFocusable(true);
            label.addFocusListener(new FocusAdapter() {
                @Override
                public void focusGained(FocusEvent e) {
                    System.out.println("Focus now on: " + label.getText());
                    label.setBorder(BorderFactory.createLineBorder(Color.RED));
                } 

                @Override
                public void focusLost(FocusEvent e) {
                    label.setBorder(null);
                }
            });
            label.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    label.requestFocusInWindow();
                }
            });
            add(label);
        }
    }

    private static void createAndShowGui() {
        JLabelFocus mainPanel = new JLabelFocus();

        JFrame frame = new JFrame("JLabelFocus");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}