禁用程序中的鼠标光标

时间:2017-09-26 17:58:11

标签: 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:要详细说明鼠标监听器,它根本不起作用。它没有打印任何东西。

1 个答案:

答案 0 :(得分:1)

如果您只想阻止用户查看旧文本,请从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);
    }
}