Установка фокуса у кнопки по условию - Java

Формулировка задачи:

Доброго времени суток. Объясните пожалуйста, как сделать чтобы кнопка получала фокус только при клике на неё. Как я понимаю, стандартными средствами сделать это не получится, придется переопределять класс JButton. Однако что и как переопределять - так и не смог найти информацию в google. Подскажите пожалуйста, как это можно сделать.

Код к задаче: «Установка фокуса у кнопки по условию - Java»

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);
            }
        });
 
 
    }
}

6   голосов, оценка 4.333 из 5


СОХРАНИТЬ ССЫЛКУ