2017-09-26 86 views
0

我正在創建一個文本冒險,我需要完全禁用鼠標光標。不只是隱藏它,雖然我已經知道如何做到這一點,但完全禁用它,以便您必須使用Alt-Tab或內置退出按鈕停止。主要原因是因爲人們可以用鼠標光標滾動,我需要禁用它,當他們被解僱時我想取消MouseEvent,但我無法讓它工作(聽衆是這樣的)。禁用程序中的鼠標光標

如果有人知道如何,請說出來告訴我! :)


編輯:哎呀,我忘了我的代碼。 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:闡述一下鼠標監聽它根本不起作用。它不打印任何東西。

+0

https://stackoverflow.com/questions/1984071/how-to-hide-cursor-in-a-swing-的可能的複製申請? – 0ddlyoko

+0

@ 0ddlyoko不,因爲我不只是試圖隱藏鼠標光標,我試圖禁用它。 – Sam1370

+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); 
    } 
} 
+0

幾乎完美,儘管我希望最大可見線條對應於屏幕。我會怎麼做? – Sam1370

+0

使用JTextArea的字體指標來確定近似行數。以示例更新答案。 – VGR