2009-07-28 78 views
0

好吧,因此可能會看到一些奇怪的,但我想從這裏的每個人得到一些建議。我是一個開始的Java開發人員(經過兩年的ASP.NET Web開發),最近我開始研究我的第一個Java項目 - 一個計算器。我意識到他們有很多計算器,但我認爲這將是一個很好的初學者項目。從Java閱讀JTextArea

無論如何,這裏是我需要幫助的。目前,我正在使用滾動JTextArea進行顯示(而不是簡單的JTextField),大約5行高。我希望用戶能夠滾動瀏覽列表以查看以前的條目等。該框的格式將在一行上等於方程式,程序將在下一個等等上生成答案。

我真正的問題是,如何實現這個最好的方法?我的第一個想法是通過JTextArea在等號被按下時讀到最後一行,並嘗試在操作符(+, - 等)和操作數中搜索該行。這是最好的方式去做這件事嗎?儘管這樣做會起作用,但我認爲它會變得麻煩,聽起來效率很低。我很樂意提供任何建議,甚至可能取代JTextArea,其他一些組件會更好。

謝謝!

+0

也許JList(下降列表)會更合適,因爲列表中的每個元素都是分隔符計算,您仍然可以允許用戶查看過去的計算結果。 無論如何只是一個想法來簡化程序 – OscarRyz 2009-07-28 01:07:54

回答

0

你的想法很有趣。所以你會有一個如。

2 + 2

然後按下時會計算添加行

等等,那麼你可以鍵入另一個公式。

它可以工作,但正如你所說,它不會是最有效的實現...但這只是獲得所需功能的權衡。

如果我要按照您描述的方式(使用JTextArea)來實現它,我會使用掃描器,並且一次掃描值字符串。

如果該行有+/-,則執行計算並將原始行和答案都添加到字符串中。

新字符串是文本字段的新值。

此方法會變得非常笨重,因爲您將不斷重新計算用戶添加的舊條目。

我想如果你不斷地存儲文檔的最後一行,當你用盡行,計算最後存儲並追加答案,那麼它不會那麼糟糕。


這裏是我會做:

使用一個JTextField在計算輸入和JList顯示舊的和他們的答案。

+0

你把它釘在頭上,維克多,爲我想要做的。我試圖想到我希望在標準計算器中看到的東西,並製作出來。我會記住你的建議。 – darthnosaj 2009-07-28 02:32:19

1

沒有必要通讀JTextArea內容 - 使用JTextArea.append()添加到最後。以下是JTextArea的內容操作的一些例子:

JTextArea ta = new JTextArea("Initial Text"); 

// Insert some text at the beginning 
int pos = 0; 
ta.insert("some text", pos); 

// Insert some text after the 5th character 
pos = 5; 
ta.insert("some text", pos); 

// Append some text 
ta.append("some text"); 

// Replace the first 3 characters with some text 
int start = 0; 
int end = 3; 
ta.replaceRange("new text", start, end); 

// Delete the first 5 characters 
start = 0; 
end = 5; 
ta.replaceRange(null, start, end); 
1

如果你是開放給不同的接口,你可能想嘗試的東西像一個JTextField在你的視圖的頂部,從中可以接收輸入您的「新'輸入的方程,然後在其下方以相同的寬度a滾動以具有所有先前的方程及其結果。這將使得當前公式的解析變得更加容易,並且您還可以輕鬆地將先前的公式及其結果保存在可滾動列表中,並且可以輕鬆保留最新的公式。

+0

儘管我討厭,但我會想象,我最終會做出類似於你所提到的事情。我真的想要一個盒子,但我知道這可能會變得非常混亂。我仍然可以嘗試,但我有一種感覺,我可能會走這條路。謝謝! – darthnosaj 2009-07-28 02:35:12

0

您可以將每一行視爲單個操作。你可以使用String數組的方式直接返回由:

String [] operations = textArea.getText().split("\n"); 

然後,你就會知道他們的恰好每一個作爲一個完整的操作(可能是無效的,但是那是另一回事)

這是你問的還是我完全誤解了你?

0

我認爲一個更簡單的解決方案實際上會使用兩個組件。一個TextArea保存迄今爲止發生的事件的「歷史記錄」,以及一個用戶輸入新條目的文本字段。

0

感謝大家回覆。你們都給了我一些想法來思考。我認爲現在,我將按照我最初的想法使用單個JTextArea並嘗試找到優化過程的方法。如果這太難了(這很可能),我會遵循大多數人的建議並使用兩個單獨的字段。謝謝你回覆大家!