【问题标题】:Java: Check if JButton is Pressed inside Frame MousePressListenerJava:检查是否在 Frame MousePressListener 内按下了 JButton
【发布时间】:2016-03-02 00:14:32
【问题描述】:

我有一个 JFrame,里面有一个按钮。当用户单击框架上的任意位置时,我想检查按钮是否在它之前被按下或单击。

例如,如果用户单击框架而不先单击按钮,它应该说“按钮未按下”,但如果用户单击按钮然后按下框架上的任何位置,那么它应该说“按钮被按下”。

我的代码:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Test1 
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();

        final int FRAME_WIDTH  = 400;
        final int FRAME_HEIGHT = 400;

        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        frame.setTitle("Test 1");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        JPanel panel = new JPanel();
        frame.add(panel,BorderLayout.NORTH);

        final JButton btnRectangle = new JButton("Rectangle");
        panel.add(btnRectangle);

        class MousePressListener implements MouseListener
        {
            public void mousePressed(MouseEvent event)
            {
                int x = event.getX() ; 
                int y = event.getY() ;

                System.out.println("you have press the mouse at X : " + x + " and Y : " + y);

                if(btnRectangle.getModel().isSelected())
                    System.out.println("the button is pressed");
                else 
                    System.out.println("the button is NOT pressed");
            }

            public void mouseReleased(MouseEvent event){}
            public void mouseClicked(MouseEvent event){}
            public void mouseEntered(MouseEvent event){}
            public void mouseExited(MouseEvent event){}
        }

        MousePressListener mListener = new MousePressListener();
        frame.addMouseListener(mListener);

        frame.setVisible(true);
    }

}

如您所见,我尝试检查是否在 JFrame MousePressed 侦听器中单击了按钮。但没有成功。我也看问题:

How can I check that JButton is pressed? If the isEnable() is not work?

但似乎无法到达任何地方,请帮助

【问题讨论】:

  • 我建议将ActionListener 添加到JButton,它应该优先于帧级侦听器。这样你就有了你的自定义 JFrame MouseListener 和一个单独的监听器来处理 JButton 逻辑。

标签: java


【解决方案1】:

按照以下步骤完成,

public class Test2 
{
    static boolean isPressed = false;

     public static void main(String[] args)
     {
        .....
             btnRectangle.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                isPressed = true;
            }
        });
        .....


        class MousePressListener implements MouseListener
        {
            public void mousePressed(MouseEvent event)
            {
                if(!isPressed){
                     System.out.println("the button is NOT pressed");

                }else{
                    System.out.println("the button is pressed");
                }
               .....
             }
          }


     }

}   

查看输出,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多