当前位置: 首页 > 面试题库 >

Java在Windows和Mac之间的按键检测方面的差异

姬正文
2023-03-14
问题内容

我有一个带有键侦听器的JList,使用户可以轻松地从列表中删除项目。在Windows上,它工作正常。您按删除键,该项目将被删除。在Mac上,程序不响应删除键。我正在使用KeyEvent.VK_DELETE,我认为这是检测特殊密钥的平台无关的方法。我应该在Mac上检测按键的方式吗?

    studentJList.setModel(studentListModel);  // a custom model I wrote
    studentJList.addKeyListener(new KeyListener() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_DELETE) {
                studentListModel.remove(studentJList.getSelectedIndex());
                studentJList.revalidate();
            }
        }

        @Override
        public void keyReleased(KeyEvent e) { }

        @Override
        public void keyTyped(KeyEvent e) { }
    });

问题答案:

例如

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

public class ListDemo extends JPanel {

    private static final long serialVersionUID = 1L;
    private JFrame frame = new JFrame("ListDemo");
    private JList list;
    private DefaultListModel listModel;

    public ListDemo() {
        super(new BorderLayout());
        listModel = new DefaultListModel();
        listModel.addElement("Jane Doe");
        listModel.addElement("John Smith");
        listModel.addElement("Kathy Green");
        list = new JList(listModel);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.setSelectedIndex(0);
        list.setVisibleRowCount(5);
        JScrollPane listScrollPane = new JScrollPane(list);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(listScrollPane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        setKeyBindings();
    }

    private void setKeyBindings() {
        list.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
                .put(KeyStroke.getKeyStroke("DELETE"), "clickDelete");
        list.getActionMap().put("clickDelete", new AbstractAction() {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                int index = list.getSelectedIndex();
                if (index > -1) {
                    listModel.remove(index);
                }
            }
        });
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                ListDemo listDemo = new ListDemo();
            }
        });
    }
}


 类似资料:
  • 我是Stack Overflow的新手,也是编程的新手,所以希望这有意义。我正在编写一个java程序,在特定目录中创建一个文件。我的程序在Windows上运行并在正确的位置创建一个文件,但在Mac上不起作用。我尝试过将反斜杠更改为单个正斜杠,但不起作用。我应该如何更改代码以使其适用于Mac或理想情况下适用于两者?我在下面放了一些代码。 提前感谢! 为文件创建新路径的类: 获取用户输入文件放置位置的

  • 这两者有什么区别?我只是在学习Java ATM,但似乎我可以双向写入文件,即(我没有复制try-catch块) 和 我理解先缓冲数据的概念,那么这是否意味着第一个示例逐个写入字符,第二个示例先将其缓冲到内存中并写入一次?

  • 下面是我的解决方案,但我不清楚“删除”的情况下代码应该是什么样子 删除字符的代码应该是什么样子的? 更新-添加了更多的示例 下面是Dmitry和Ingen答案的比较:https://dotnetfiddle.net/mjqdao

  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

  • 问题内容: 我有一个名为jobrunner.py的脚本,该脚本在main.py中调用类方法。见下文… 进程_a和_b调用在OSX和Ubuntu上没有任何问题,但是当我尝试在Windows(相同版本的python和所有版本)上运行相同的东西时,它不能说索引超出范围。这使我相信在Windows平台上的模块之间未设置或传递“全局”变量BBOX。有没有其他人看到过这样的东西并且知道如何解决? 亚当 更新:

  • 我试图使一个应用程序,使用tab键做一些事情。我已经实现了KeyListener接口,并且能够对所有其他键进行编程。但是当我按下Tab键并在keyPressed()方法中,我放了以下内容: 我没有输出。tab键是唯一不提供输出的键。所有其他键都打印了相应的键码。这是为什么?