2013-12-21 89 views
1

我已經看到How to set AUTO-SCROLLING of JTextArea in Java GUI?如何解決JTextArea滾動到底部?

blackArea = new JTextArea(); 
    blackArea.setFont(new Font("Tahoma", Font.BOLD, 11)); 
    blackArea.setText("Loggend on Administrator...\n" +date); 
    blackArea.setForeground(Color.RED); 
    blackArea.setBackground(Color.BLACK); 

    DefaultCaret caret = (DefaultCaret)blackArea.getCaret(); 
    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
    blackArea.setCaretPosition(blackArea.getDocument().getLength()); 
    scrollPane.setViewportView(blackArea); 

這種運作良好。當更新到JTextArea時,滾動自動移動到底部,以便我可以看到刷新數據。 但問題是,當我點擊JTextArea中的任何空格時,自動滾動停止。沒有更多的自動滾動工作。如何解決它?

補充:我添加了文本到blackArea調用GUI.blackArea.append("bla bla bla");圖形用戶界面是上面的代碼包括的類名稱。感謝@ hovercraft-full-of-eels

回答

3

結賬Smart Scrolling。這是對其他滾動答案的改進。

當附加發生時,滾動窗格位於底部,它將繼續保持滾動窗格位於底部。但是,如果用戶從底部移動視口,那麼追加將不會自動滾動到底部。

+0

謝謝。我解決了問題。 – Juntae

2

您不會顯示您將文本添加或附加到JTextArea的位置,這是至關重要的,因爲插入位置的更改應該發生在那裏。


編輯
幽州:

對不起,我只是追加在其他類中的文本,只需調用GUI.blackArea.append( 「唧唧歪歪」);我應該使用SwingUtilities.invokeLater嗎?

我知道你有來自Rob Camick,一個真正的搖擺大師像樣的答案,但我還必須補充一點,你真的不應該暴露你的類的字段的方式(希望你無關的部件都聲明爲靜態,因爲你的代碼表明它們可能是)。相反,公開的方法允許控制能力來改變你的領域的狀態。比如你的GUI類可以具有像這樣

public void blackAreaAppend(String text) { 
    blackArea.append(text); 
    // code here to advance cursor 
} 

如果此方法總是取消了EDT的公共方法:

public void blackAreaAppend(String text) { 
    SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     blackArea.append(text); 
     // code here to advance cursor 
    } 
    }); 
} 

或者,如果你只是不知道:

public void blackAreaAppend(String text) { 

    if (SwingUtilities.isEventDispatchThread()) { 
    blackArea.append(text); 
    // code here to advance cursor  
    } else { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
     blackArea.append(text); 
     // code here to advance cursor 
     } 
    }); 
    } 
} 
+0

對不起,我只是在其他類中追加文本,只是調用'GUI.blackArea.append(「bla bla bla」);'我應該使用'SwingUtilities.invokeLater'嗎? – Juntae

+1

@ user3100921:請參閱編輯以回答。 –

+0

謝謝。 +1您的意見和評論!祝你聖誕節愉快! – Juntae

0

我解決了這個問題。這是觀點的問題。當我點擊JTextarea上的任何空間時,脫字符號的位置就會改變,所以視點也會改變。遵循我的代碼,沒有更新的觀點。

  • 所以,我做了一個方法:

    public static void addLog(final String log){ 
    SwingUtilities.invokeLater(new Runnable() { 
        @Override 
        public void run() { 
         GUI.blackArea.append(log); 
         GUI.blackArea.setCaretPosition(GUI.blackArea.getDocument().getLength()); 
        } 
    }); 
    

    }

我改變blackArea.append("...")到`addLog(」 ...),我得到了這個問題,但是,請記住,更新時無法修復插入符號位置。