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