java - 在程序中禁用鼠标光标

标签 java adventure

我正在创建一个文本冒险,我需要完全禁用鼠标光标。不仅仅是隐藏它,虽然我已经知道如何做到这一点,但完全禁用它,以便您必须使用Alt-Tab 或内置退出按钮可停止。这样做的主要原因是因为人们可以使用鼠标光标滚动,而我需要禁用它,我考虑过在触发 MouseEvents 时取消它们,但我无法让它工作(即监听器)。

如果有人知道怎么做,请大声告诉我! :)

<小时/>

编辑:哎呀,我忘记了我的代码。 Here is my Console class. 这是由另一个类使用 new Console();

启动的 <小时/>

编辑2:以下是我尝试创建不可见光标和鼠标监听器的一些片段。第一个有效,但后者无效。

// Invisible cursor
Toolkit toolkit = Toolkit.getDefaultToolkit();
Point hotSpot = new Point(0,0);
BufferedImage cursorImage = new BufferedImage(1, 1, BufferedImage.TRANSLUCENT); 
Cursor invisibleCursor = toolkit.createCustomCursor(cursorImage, hotSpot, "InvisibleCursor");        
frame.setCursor(invisibleCursor);

// Adding mouse listener
frame.addMouseListener(new MouseAdapter() { 
      public void mousePressed(MouseEvent me) { 
        System.out.println(me); 
      } 
});
<小时/>

编辑3:要详细说明鼠标监听器,它根本不起作用。它不打印任何内容。

最佳答案

如果您只是想阻止用户看到旧文本,请从 JTextArea 中删除旧文本。

最简单的方法是将 JTextArea 保留在 JScrollPane 中,并自己跟踪这些行:

private static final int MAX_VISIBLE_LINES = 12;

private final Deque<String> lines = new LinkedList<>();

void appendLine(String line,
                JTextArea textArea) {

    lines.addLast(line);
    if (lines.size() > MAX_VISIBLE_LINES) {
        lines.removeFirst();
    }

    String text = String.join("\n", lines);
    textArea.setText(text);

    textArea.setCaretPosition(text.length());
    try {
        textArea.scrollRectToVisible(
            textArea.modelToView(text.length()));
    } catch (BadLocationException e) {
        throw new RuntimeException(e);
    }
}

试图在多任务桌面上霸占鼠标只会让用户生气。您想要一个阻止您阅读电子邮件的应用程序吗?

更新:

如果您希望文本行数基于 JTextArea 的当前高度,请使用 JTextArea 的字体规范。我认为你不需要完全正确,如果数字有一两行偏差也没关系。 (考虑换行之类的事情会困难得多。)

private final Deque<String> lines = new LinkedList<>();

void appendLine(String line,
                JTextArea textArea) {

    FontMetrics metrics = textArea.getFontMetrics(textArea.getFont());

    JViewport viewport = (JViewport) textArea.getParent();
    int visibleLineCount = viewport.getExtentSize().height / metrics.getHeight();

    lines.addLast(line);
    while (lines.size() > visibleLineCount) {
        lines.removeFirst();
    }

    String text = String.join("\n", lines);
    textArea.setText(text);

    textArea.setCaretPosition(text.length());
    try {
        textArea.scrollRectToVisible(
            textArea.modelToView(text.length()));
    } catch (BadLocationException e) {
        throw new RuntimeException(e);
    }
}

关于java - 在程序中禁用鼠标光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46432992/

相关文章:

java - 应用程序在多次点击时崩溃 SildingMenu

Javascript 循环 if 语句进行文本冒险

java - 如何延迟在 TextView 中显示文本(逐字逐句)

Java SplitPaneDemo 不起作用?

java - 在Java中执行python编译脚本(.pyc)

java - 如何在 Spock 中返回 Long 的 stub 方法?

java - 数学公式的问题 - Java

python - 文本冒险中匹配用户选择的问题。

java - 用于解析简单的基于文本的数据文件的正则表达式

python - 文本冒险的轻量级 MIDI 播放?