使用JButton和2 JTextField

时间:2014-12-19 18:15:41

标签: java swing jbutton actionlistener jtextfield

我似乎无法让JButton使用2个JTextField, 我的目标是:

  1. 1.如果应用程序启动且用户没有聚焦(选择)JTextField:如果用户按下JButton,则追加到JTextField tf [0]。

    2.如果JTextField tf [0]被聚焦(选择)&用户按下JButton b [0]而不是将数字附加到tf [0]。

    3.如果JTextField tf [1]被聚焦(选择)&用户按下JButton b [0]而不是将数字附加到tf [1]。

  2. 这是我的代码, 我尝试使用Only ActionListener&而不是添加MouseListener而不是将其更改为MouseAdapter,但大多数时候,目标2或目标3不是同时实现两个或全部3个目标。

    package swingapp;
    
    import java.awt.event.*;
    import java.awt.*;
    
    import javax.swing.*;
    public class SwingApp {
    
        JFrame CalcF;
        JPanel p1, p2, p3;
        JLabel j[] = new JLabel[3];
        JButton b[] = new JButton[12];
        JButton op[] = new JButton[4];
        JTextField tf[] = new JTextField[3];
        boolean selected = false;
        Actions a;
        Mouse m;
    
        SwingApp() {
            a = new Actions();
            m = new Mouse();
            CalcF = new JFrame("Calculator");
            CalcF.setLocationRelativeTo(null);
            CalcF.setSize(300, 300);
            CalcF.setLayout(null);
            CalcF.setResizable(false);
            p1 = new JPanel();
            p2 = new JPanel();
            p3 = new JPanel();
            p1.setLayout(null);
            p1.setBounds(10, 10, 275, 55);
            p1.setBackground(Color.LIGHT_GRAY);
            tf[0] = new JTextField(5);
            tf[1] = new JTextField(5);
            tf[2] = new JTextField(5);
            tf[0].setBounds(5, 25, 70, 20);
            tf[1].setBounds(85, 25, 70, 20);
            tf[2].setBounds(185, 25, 70, 20);
            tf[2].setEditable(false);
            j[0] = new JLabel("Number1");
            j[0].setFont(new Font("SanSerif", Font.BOLD, 14));
            j[0].setBounds(5, 5, 100, 20);
            j[1] = new JLabel("Number2");
            j[1].setFont(new Font("SanSerif", Font.BOLD, 14));
            j[1].setBounds(85, 5, 100, 20);
            j[2] = new JLabel("Result");
            j[2].setFont(new Font("SanSerif", Font.BOLD, 14));
            j[2].setBounds(185, 5, 100, 20);
            for (int i = 0; i < 3; i++) {
                p1.add(tf[i]);
                p1.add(j[i]);
            }
            p2.setLayout(new GridLayout(4, 4));
            p2.setBounds(85, 75, 125, 125);
            b[10] = new JButton("c");
            b[11] = new JButton("s");
            b[10].setToolTipText("Clear all Fields");
            b[11].setToolTipText("Save Your Result");
            for (int i = 9; i >= 0; i--) {
    
                b[i] = new JButton(String.valueOf(i));
                p2.add(b[i]);
            }
            tf[0].addMouseListener(m);
            b[0].addActionListener(a);
            p2.add(b[10]);
            p2.add(b[11]);
            p3.setBounds(15, 210, 255, 35);
            p3.setBackground(Color.lightGray);
            op[0] = new JButton("Add");
            op[1] = new JButton("Sub");
            op[2] = new JButton("Mul");
            op[3] = new JButton("Div");
            for (int i = 0; i < 4; i++) {
                p3.add(op[i]);
            }
    
            CalcF.add(p1);
            CalcF.add(p2);
            CalcF.add(p3);
            CalcF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            CalcF.setVisible(true);
    
        }
    
    
        public static void main(String[] args) {
            new SwingApp();
        }
    
        class Mouse extends MouseAdapter {
    
            @Override
            public void mouseClicked(MouseEvent e) {
                if (tf[0].isFocusOwner()) {
                    selected = false;
                } else if (tf[1].isFocusOwner()) {
                    selected = true;
                }
    
            }
    
        }
    
        class Actions implements ActionListener {
    
            public void actionPerformed(ActionEvent e) {
                if (b[0].isFocusOwner()) {
                    if (selected) {
                        tf[0].setText(tf[0].getText() + "0");
                    } 
                }
            }
    
        }
    
    }
    

    这是一个简单的计算器应用程序,我正在努力。 经过一天的搜索后,我无法在stackoverflow或google中的任何地方找到解决方案。

0 个答案:

没有答案