【问题标题】:How do I make a button?如何制作按钮?
【发布时间】:2014-06-21 17:13:04
【问题描述】:

我不想要JButton 或类似的东西,我无法弄清楚ActionListeners。 如果有人能告诉我应该在他的代码中添加什么,那么当我点击这些坐标时,它会将我带到下一个状态:

class paint extends JPanel implements ActionListener{

  public void MouseInput(MouseEvent m){

    int y = m.getY();
    int x = m.getX();

    if(x >= 250 && x <= 550 && y >= 300 && y <= 400){

    }
  }

  public void actionPerformed(ActionEvent e) {
  }
}

【问题讨论】:

  • 要让 JPanel 响应鼠标点击,您需要在面板中添加一个 MouseListener。阅读docs.oracle.com/javase/tutorial/uiswing/events/…。按钮可以具有 ActionListener,因为它们将低级鼠标单击和键盘操作转换为高级操作事件。 JPanel 不这样做。

标签: java swing button actionlistener


【解决方案1】:

为了让您的 Swing 组件JPanel 通知某些源事件,在您的情况下,您希望收听鼠标点击;你的组件应该添加一些实现 MouseListener 的监听器(这个监听器应该实现在 MouseListener 接口中声明的方法,这将成为你自定义逻辑的基础):

public class MyMouseListener implements MouseListener
{
  @Override
  public void mouseClicked(MouseEvent e)
  {
    // How click event should be handled 
  }

  @Override
  public void mousePressed(MouseEvent e)
  {
    // How press (clicked but not released) event should be handled 
  }

  @Override
  public void mouseReleased(MouseEvent e)
  {
    // How release mouse button event should be handled 
  }

  @Override
  public void mouseEntered(MouseEvent e)
  {
    // How mouse cursor enter event should be handled 
  }

  @Override
  public void mouseExited(MouseEvent e)
  {
    // How mouse cursor exit event should be handled 
  }
}

那么你的JPanel 组件就可以添加这个lisneter了:

public class MyPanel extends JPanel
{
  public static void main(String[] args)
  {
    MyPanel panel = new MyPanel();
    panel.addMouseListener(new MyMouseListener());
  }
}

默认方法是将 MouseListener 特定实现声明为 Swing 组件的内部类,以便从这些类的自然绑定中受益并从一个和另一个访问两个实例变量。 这将允许您为单个事件拥有多个侦听器,但如果您不需要,您仍然可以将自己的组件设置为侦听器:

public class MyPanel extends JPanel implements MouseListener
{
  public static void main(String[] args)
  {
    MyPanel panel = new MyPanel();
    panel.initialize();
  }

  private void initialize()
  {
    this.addMouseListener(this);
  }

  @Override
  public void mouseClicked(MouseEvent e)
  {
  }

  @Override
  public void mousePressed(MouseEvent e)
  {
  }

  @Override
  public void mouseReleased(MouseEvent e)
  {
  }

  @Override
  public void mouseEntered(MouseEvent e)
  {
  }

  @Override
  public void mouseExited(MouseEvent e)
  {
  }
}

【讨论】:

    猜你喜欢
    • 2017-05-20
    • 2021-10-23
    • 2012-05-03
    • 2012-03-21
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多