【问题标题】:How do I close the jFrame of my JList?如何关闭我的 JList 的 jFrame?
【发布时间】:2013-06-19 13:18:15
【问题描述】:

我有一个 JList 问题。我有这个 JList 的听众(鼠标和键盘)。 我希望,在您双击列表中的一个选项(或按 Enter)后,JFrame 会关闭。我在任何地方都找不到。你能帮我解决这个问题吗?

这是我使用的类(取自 StackOverflow):

import javax.swing.*;
import java.awt.event.*;
import java.util.Vector;

public class ActionJList extends JList {

  ActionListener al;
  boolean close=false;

  public ActionJList(String[] it){
    super(it);

    addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent me) {
        if (al == null) return;
        Object ob[] = getSelectedValues();
        if (ob.length > 1) return;
        if (me.getClickCount() == 2) {
          System.out.println("Sending ACTION_PERFORMED to ActionListener");
          al.actionPerformed(new ActionEvent(this,
          ActionEvent.ACTION_PERFORMED,
          ob[0].toString()));
          me.consume();
          close=true;

        }
      }
    });

    addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent ke) {
        if (al == null) return;
        Object ob[] = getSelectedValues();
        if (ob.length > 1) return;
        if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
          System.out.println("Sending ACTION_PERFORMED to ActionListener");
          al.actionPerformed(new ActionEvent(this,
          ActionEvent.ACTION_PERFORMED,
          ob[0].toString()));
          ke.consume();
        } 
      }
    });
    this.setSelectedIndex(0); 
  }

  public ActionJList(Vector it){
    super(it);

    addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent me) {
        if (al == null) return;
        Object ob[] = getSelectedValues();
        if (ob.length > 1) return;
        if (me.getClickCount() == 2) {
          System.out.println("Sending ACTION_PERFORMED to ActionListener");
          al.actionPerformed(new ActionEvent(this,
          ActionEvent.ACTION_PERFORMED,
          ob[0].toString()));
          me.consume();
        }
      }
    });

    addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent ke) {
        if (al == null) return;
        Object ob[] = getSelectedValues();
        if (ob.length > 1) return;
        if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
          System.out.println("Sending ACTION_PERFORMED to ActionListener");
          al.actionPerformed(new ActionEvent(this,
          ActionEvent.ACTION_PERFORMED,
          ob[0].toString()));
          ke.consume();
        } 
      }
    });
    this.setSelectedIndex(0); 
  }



  public void addActionListener(ActionListener al){
    this.al = al;
  }
  public boolean getClose(){return close;}
}

【问题讨论】:

  • 您在 SO 上找到的代码是否缩进严重?

标签: java swing jlist listselectionlistener


【解决方案1】:

你总是可以使用下面的sn-p:

Window window = SwingUtilities.getWindowAncestor(ActionJList.this);
if (window!=null)
    window.setVisible(false);

注意:不要将 KeyListener/KeyAdapter 添加到您的 JList,而应考虑使用 Swing KeyBindings。

【讨论】:

  • +1 用于使用具有许多有用方法的 SwingUtilities 类。
  • 很好,没想到有这个功能。
【解决方案2】:

查看List Action 的值得一看的可重用类,它为您添加了 MouseListener 和 Key Bindings。此外,事件的来源是 JList,因此您可以使用 Guillaume 的建议轻松创建 Action。

无需对可用的 JFrame 进行引用。 SwingUtilities 方法是更好的方法。

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 2013-05-28
    • 2012-01-18
    • 2011-05-14
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 2011-07-20
    • 2012-07-03
    相关资源
    最近更新 更多