Java 在程序中禁用鼠标光标

Java 在程序中禁用鼠标光标,java,adventure,Java,Adventure,我正在创建一个文本冒险,我需要完全禁用鼠标光标。不只是隐藏它,虽然我已经知道如何做到这一点,但完全禁用它,以便您必须使用Alt选项卡或内置的退出按钮停止。这样做的主要原因是,人们可以用鼠标光标滚动,我需要禁用它,我曾想过在鼠标事件被触发时取消鼠标事件,但我无法让它在侦听器中正常工作 如果有人知道怎么做,请大声告诉我!: 编辑:哎呀,我忘了带密码了。 这是由另一个具有新控制台的类启动的 编辑2:下面是我试图创建一个不可见光标和鼠标侦听器的一些片段。第一种方法可行,但后者不行 // Invisibl

我正在创建一个文本冒险,我需要完全禁用鼠标光标。不只是隐藏它,虽然我已经知道如何做到这一点,但完全禁用它,以便您必须使用Alt选项卡或内置的退出按钮停止。这样做的主要原因是,人们可以用鼠标光标滚动,我需要禁用它,我曾想过在鼠标事件被触发时取消鼠标事件,但我无法让它在侦听器中正常工作

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

编辑:哎呀,我忘了带密码了。 这是由另一个具有新控制台的类启动的

编辑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);
    }
}

可能重复?@0ddlyoko不,因为我不只是想隐藏鼠标光标,而是想禁用它。请将您的代码粘贴到question@DavidBrossard哈斯捷宾坏了吗?这真的是很长的代码…@DavidBrossard做得非常完美,尽管我希望最大可见线与屏幕大小相对应。我该怎么做?使用JTextArea的字体度量来确定大致的行数。用一个例子更新了答案。