Установка фокуса у кнопки по условию - 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); } }); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д