如何通过单击鼠标来聚焦 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());
}
}
我正在做一个带有 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());
}
}