Установка фокуса у кнопки по условию - Java
Формулировка задачи:
Доброго времени суток.
Объясните пожалуйста, как сделать чтобы кнопка получала фокус только при клике на неё. Как я понимаю, стандартными средствами сделать это не получится, придется переопределять класс JButton. Однако что и как переопределять - так и не смог найти информацию в google. Подскажите пожалуйста, как это можно сделать.
Решение задачи: «Установка фокуса у кнопки по условию»
textual
Листинг программы
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JBFrame2 extends JFrame {
private JTextField jDisplay = new JTextField();
String op = "1234";
private JButton[] jButtons = new JButton[4];
private JButton jButton1 = new JButton("B1");
private JButton jButton2 = new JButton("B2");
double num1 = 0;
double num2 = 0;
double result = 0;
String operation;
private class AL implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String s = ((JButton) e.getSource()).getText();
jDisplay.setText(s);
}
}
private JButton current = null;
private class AL2 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
operation = "";
jDisplay.setText("Stop");
}
}
class ML implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
JButton jb = (JButton) e.getSource();
if (current != null && jb != current) {
return;
}
jDisplay.setText(jb.getText() + " Clicked");
}
@Override
public void mousePressed(MouseEvent e) {
JButton jb = (JButton) e.getSource();
if (current != null && jb != current) {
return;
}
jDisplay.setText(jb.getText() + " Pressed");
current = (JButton) e.getSource();
}
@Override
public void mouseReleased(MouseEvent e) {
JButton jb = (JButton) e.getSource();
if (current != null && jb != current) {
return;
}
jDisplay.setText(jb.getText() + " Released");
current = null;
}
@Override
public void mouseEntered(MouseEvent e) {
JButton jb = (JButton) e.getSource();
if (current != null && jb != current) {
return;
}
jDisplay.setText(jb.getText() + " Entered");
}
@Override
public void mouseExited(MouseEvent e) {
JButton jb = (JButton) e.getSource();
if (current != null && jb != current) {
return;
}
jDisplay.setText(jb.getText() + " Exited");
}
}
public JBFrame2() {
jDisplay.setText("" + result);
for (int i = 0; i < jButtons.length; i++) {
JButton jButton = new JButton(op.split("")[i]);
jButton.addActionListener(new AL());
jButtons[i] = jButton;
}
jButton1.setFocusable(true);
jButton1.setRolloverEnabled(true);
jButton1.addMouseListener(new ML());
jButton2.setFocusable(true);
jButton2.setRolloverEnabled(true);
jButton2.addMouseListener(new ML());
JPanel jPanel = new JPanel();
jPanel.setLayout(new GridLayout(5, 2));
jPanel.add(new JLabel("Display : ", SwingConstants.CENTER));
jDisplay.setHorizontalAlignment(SwingConstants.CENTER);
jPanel.add(jDisplay);
for (JButton jButton : jButtons) {
jPanel.add(jButton);
}
jPanel.add(jButton1);
jPanel.add(jButton2);
add(jPanel);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setLocation(dim.width / 2, dim.height / 2);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JBFrame2 jFramecal = new JBFrame2();
jFramecal.setSize(200, 200);
jFramecal.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jFramecal.setVisible(true);
}
});
}
}