2009-07-28 8 views
0

D'accord, donc peut-être vu un peu étrange, mais je voulais obtenir quelques suggestions de tout le monde ici. Je suis un développeur Java débutant (après 2 ans de développement web ASP.NET) et j'ai récemment commencé à travailler sur mon premier projet Java - une calculatrice. Je me rends compte qu'il y a des tonnes de calculatrices là-bas, mais je pensais que ce serait un bon projet débutant.Lecture à partir de Java JTextArea

De toute façon, voici ce que j'ai besoin d'aide. Actuellement, j'utilise un défilement JTextArea pour l'affichage (au lieu d'un JTextField simple) qui est d'environ 5 lignes de hauteur. Je veux que l'utilisateur puisse faire défiler la liste pour voir les entrées précédentes et autres. Le format de la boîte sera l'équation sur une ligne et le programme générera la réponse sur le suivant et ainsi de suite. Ma vraie question est, comment est la meilleure façon de mettre en œuvre cela? Ma première idée était de lire JTextArea quand on appuyait sur equals, jusqu'à la dernière ligne et d'essayer de chercher cette ligne pour l'opérateur (+, -, etc.) et les opérandes. Est-ce la meilleure façon de s'y prendre? Bien que cela fonctionnerait, je pense que cela pourrait devenir lourd et très inefficace. Je suis ouvert à toutes les suggestions, même en remplaçant éventuellement le JTextArea est un autre élément qui fonctionnerait mieux.

Merci!

+0

Peut-être un JList (une liste drowpdown) serait plus approprié puisque chaque élément de la liste serait un calcul séparé et encore vous permettra à l'utilisateur de voir les calculs passés. En tout cas juste une idée pour simplifier le programme – OscarRyz

Répondre

0

votre idée est intéressante. donc vous auriez une ligne telle que.

2 + 2

puis quand calculate pression ajouter la ligne

et ainsi de suite, vous pouvez taper dans une autre équation.

cela pourrait fonctionner mais comme vous l'avez dit, ce ne serait pas la mise en œuvre la plus efficace ... mais c'est juste un compromis entre l'obtention de la fonctionnalité souhaitée.

Si j'allais l'implémenter de la façon que vous avez décrite (avec un JTextArea) j'utiliserais le scanner, et analyserais la chaîne de valeur une ligne à la fois.

Si la ligne contient +/- alors faites le calcul et ajoutez à la fois la ligne d'origine et la réponse à une chaîne.

La nouvelle chaîne est la nouvelle valeur du champ de texte.

cette méthode serait assez lourde car vous recalculeriez continuellement les anciennes entrées des utilisateurs plus ont été ajoutés.

Je suppose que si vous avez continuellement stocké la dernière ligne du document, lorsque vous n'avez plus de lignes, calculez le dernier stocké et ajoutez la réponse, alors ce ne serait pas si grave.


Voici ce que je ferais:

utiliser un JTextField pour entrer dans les calculs, et un JList pour afficher les anciens et leurs réponses.

+0

Vous l'avez cloué droit sur la tête, Victor, pour ce que j'essaie de faire. J'essayais de penser à des choses que j'aimerais voir dans une calculatrice standard et le faire. Je garderai vos suggestions à l'esprit. – darthnosaj

1

Il n'est pas nécessaire de lire le contenu de JTextArea - utilisez JTextArea.append() pour ajouter à la fin.Voici quelques exemples de manipulation de contenu 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

Si vous êtes ouvert aux interfaces différentes, vous voudrez peut-être essayer quelque chose comme un JTextField en haut de votre point de vue, à partir de laquelle vous pouvez recevoir en entrée de votre « nouvelle 'équation entrée, puis en dessous avec la même largeur un JList qui ferait défiler pour avoir toutes les équations précédentes et leurs résultats. Cela rendrait l'analyse de la formule actuelle beaucoup plus facile, et vous auriez aussi un temps facile à garder votre formule précédente et leurs résultats dans une liste déroulante, avec l'option facile de garder le plus récent au sommet.

+0

Autant que je déteste, j'imagine que je vais finir par faire quelque chose comme ce que vous mentionnez. Je voulais vraiment une seule boîte, mais je savais que ce serait probablement vraiment désordonné. Je pourrais encore essayer, mais j'ai le sentiment que je pourrais finir par suivre cette route. Merci! – darthnosaj

+0

C'est juste pour s'amuser, non? Vous pourriez faire les deux. Cela vous donnerait une bonne première impression sur différentes façons de faire la même chose dans la langue. Bonne chance. – akf

0

Vous pouvez traiter chaque ligne en une seule opération. De cette façon, vous pouvez utiliser le tableau de chaînes retourné directement par:

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

Et vous saurez exactement chacun d'eux comme une opération complète (peut être nul, mais que » une autre histoire)

Est-ce que c'est ce que vous avez demandé ou que je vous ai mal compris?

0

Je pense qu'une solution plus simple utiliserait deux composants. Un TextArea pour contenir l'historique de ce qui s'est passé jusqu'à présent, et un champ de texte où l'utilisateur entre de nouvelles entrées.

0

Merci à tous ceux qui ont répondu. Vous m'avez tous donné des idées sur lesquelles réfléchir. Je pense en ce moment, je vais aller avec mon idée originale d'utiliser un seul JTextArea et essayer de trouver des moyens d'optimiser le processus. Si cela devient trop difficile (ce qui est très possible), je suivrai le conseil de la majorité et utiliserai deux champs distincts. Merci d'avoir répondu à tous!

Questions connexes