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

Узнай цену своей работы

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

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

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

textual
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4.  
  5. public class JBFrame2 extends JFrame {
  6.     private JTextField jDisplay = new JTextField();
  7.     String op = "1234";
  8.     private JButton[] jButtons = new JButton[4];
  9.     private JButton jButton1 = new JButton("B1");
  10.     private JButton jButton2 = new JButton("B2");
  11.  
  12.  
  13.     double num1 = 0;
  14.     double num2 = 0;
  15.     double result = 0;
  16.     String operation;
  17.  
  18.  
  19.     private class AL implements ActionListener {
  20.         @Override
  21.         public void actionPerformed(ActionEvent e) {
  22.             String s = ((JButton) e.getSource()).getText();
  23.             jDisplay.setText(s);
  24.         }
  25.     }
  26.  
  27.     private JButton current = null;
  28.  
  29.     private class AL2 implements ActionListener {
  30.         @Override
  31.         public void actionPerformed(ActionEvent e) {
  32.             operation = "";
  33.             jDisplay.setText("Stop");
  34.         }
  35.     }
  36.     class ML implements MouseListener {
  37.         @Override
  38.         public void mouseClicked(MouseEvent e) {
  39.             JButton jb = (JButton) e.getSource();
  40.             if (current != null && jb != current) {
  41.                 return;
  42.             }
  43.             jDisplay.setText(jb.getText() + " Clicked");
  44.  
  45.         }
  46.  
  47.         @Override
  48.         public void mousePressed(MouseEvent e) {
  49.             JButton jb = (JButton) e.getSource();
  50.             if (current != null && jb != current) {
  51.                 return;
  52.             }
  53.             jDisplay.setText(jb.getText() + " Pressed");
  54.             current = (JButton) e.getSource();
  55.         }
  56.  
  57.         @Override
  58.         public void mouseReleased(MouseEvent e) {
  59.             JButton jb = (JButton) e.getSource();
  60.             if (current != null && jb != current) {
  61.                 return;
  62.             }
  63.             jDisplay.setText(jb.getText() + " Released");
  64.             current = null;
  65.         }
  66.  
  67.         @Override
  68.         public void mouseEntered(MouseEvent e) {
  69.             JButton jb = (JButton) e.getSource();
  70.             if (current != null && jb != current) {
  71.                 return;
  72.             }
  73.             jDisplay.setText(jb.getText() + " Entered");
  74.  
  75.         }
  76.  
  77.         @Override
  78.         public void mouseExited(MouseEvent e) {
  79.             JButton jb = (JButton) e.getSource();
  80.             if (current != null && jb != current) {
  81.                 return;
  82.             }
  83.             jDisplay.setText(jb.getText() + " Exited");
  84.         }
  85.     }
  86.  
  87.  
  88.  
  89.     public JBFrame2() {
  90.  
  91.         jDisplay.setText("" + result);
  92.         for (int i = 0; i < jButtons.length; i++) {
  93.             JButton jButton = new JButton(op.split("")[i]);
  94.             jButton.addActionListener(new AL());
  95.             jButtons[i] = jButton;
  96.  
  97.         }
  98.  
  99.  
  100.         jButton1.setFocusable(true);
  101.         jButton1.setRolloverEnabled(true);
  102.         jButton1.addMouseListener(new ML());
  103.  
  104.  
  105.         jButton2.setFocusable(true);
  106.         jButton2.setRolloverEnabled(true);
  107.         jButton2.addMouseListener(new ML());
  108.  
  109.  
  110.         JPanel jPanel = new JPanel();
  111.         jPanel.setLayout(new GridLayout(5, 2));
  112.         jPanel.add(new JLabel("Display : ", SwingConstants.CENTER));
  113.         jDisplay.setHorizontalAlignment(SwingConstants.CENTER);
  114.         jPanel.add(jDisplay);
  115.         for (JButton jButton : jButtons) {
  116.             jPanel.add(jButton);
  117.         }
  118.         jPanel.add(jButton1);
  119.         jPanel.add(jButton2);
  120.  
  121.         add(jPanel);
  122.         Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
  123.         setLocation(dim.width / 2, dim.height / 2);
  124.  
  125.     }
  126.  
  127.  
  128.     public static void main(String[] args) {
  129.         SwingUtilities.invokeLater(new Runnable() {
  130.             @Override
  131.             public void run() {
  132.                 JBFrame2 jFramecal = new JBFrame2();
  133.                 jFramecal.setSize(200, 200);
  134.                 jFramecal.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  135.                 jFramecal.setVisible(true);
  136.             }
  137.         });
  138.  
  139.  
  140.     }
  141. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут