Comment puis-je obtenir la saisie de l'utilisateur à partir d'un component swing jtextfield?
Je cherche un très simple formulaire conçu pour prendre saisie de l'utilisateur dans un component swing jtextfield et de montrer que même la saisie via un pop-up boîte de dialogue.
Je peux coder en dur le component swing jtextfield avoir un numéro de préréglage à l'aide de setText(). Si je fais cela, mon programme fonctionne parfaitement.
Cependant, lorsque je laisse le champ vide et essayer getText() pour afficher le texte dans la fenêtre de dialogue, j'ai un vide cadre de pop up, ou je reçois une "chaîne vide" exception (j'essaie d'analyser les Cordes à Double.)
package buttontest;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import javax.swing.*;
import java.awt.event.ActionEvent;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class ButtonTest
{
public static void main(String[] args)
{
ButtonFrame frame = new ButtonFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class ButtonFrame extends JFrame
{
@SuppressWarnings("LeakingThisInConstructor")
public ButtonFrame()
{
setTitle("SunStream Loan Calculator v2.0");
setSize(900,900);
ButtonPanel panel = new ButtonPanel();
panel.add(new JLabel("Enter your loan amount:"));
loanAmt = new JTextField(40);
panel.add(loanAmt);
add(panel,BorderLayout.CENTER);
}
public JTextField loanAmt;
class ButtonPanel extends JPanel implements ActionListener
{
private Component frame;
public ButtonPanel()
{
final JButton b2 = new JButton("Calculate");
add(b2, BorderLayout.SOUTH);
b2.setActionCommand("calculate");
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
ButtonFrame bf = new ButtonFrame();
if("calculate".equals(e.getActionCommand()))
{
JOptionPane.showMessageDialog(frame, bf.loanAmt.getText());
}
}
});
}
@Override
public void actionPerformed(ActionEvent ae) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
}
Toute aide serait grandement appréciée. Je fais des recherches à l'aide d'un KeyListener ou KeyEvent mais je ne comprends pas très bien assez bien.
OriginalL'auteur Phoenix | 2011-10-23
Vous devez vous connecter pour publier un commentaire.
Vous êtes en train de créer une "ombre" ButtonFrame variable à l'intérieur de la b2 du ActionListener. Oui le bf variable se réfère à un ButtonFrame objet qui est de la même catégorie que l'affiche ButtonFrame objet, mais il se réfère à un tout distinct et non visualisées à l'objet. La clé est d'obtenir le texte de la ButtonFrame objet qui est réellement affiché, et ce qui peut être obtenu à partir de l'intérieur d'un intérieur de classe via le
ButtonFrame.this
construire:Ensuite utiliser les accesseurs plutôt que d'accéder à des champs tels que le component swing jtextfield directement. Cela réduit les chances du code de causer des effets secondaires, tels que la modification des propriétés de l'objet component swing jtextfield par inadvertance.
Par exemple (les changements sont indiqués par //!! commentaire):
Vous êtes la bienvenue! Bonne chance sur ce projet et sur votre Java études!
la clé ici est qu'il est tout au sujet de références. Vous avez besoin d'une référence à l'objet affiché, pas tout ButtonFrame objet. Le plus vous comprendrez les références et les variables de référence, mieux vous comprendrez Java et Oups.
Cela fait donc beaucoup de sens. J'ai été me frappant la tête contre un mur en essayant de le comprendre. Donc, lors de la création de 3 nouveaux champs de texte, je vais avoir besoin de faire référence à chaque affiché objet (ButtonFrame1.cette -- ButtonFrame2.cette -- ButtonFrame3.c') pour faire quelque chose avec eux. Je cherche à faire une simple calculatrice d'amortissement
Non, je pense pas. Si vous avez trois JTextFields et ils sont tous détenus dans la même classe, ButtonFrame, alors vous aurez seulement besoin d'une référence à l'un ButtonFrame objet, ButtonFrame.c'. Vous aurez alors besoin de trois méthodes d'accès pour obtenir le texte des trois JTextFields ou une méthode d'accesseur qui prend un paramètre qui en quelque sorte les clés de la méthode qui component swing jtextfield du texte de retour.
OriginalL'auteur Hovercraft Full Of Eels
La seule façon vous pouvez accéder à votre loanAmt est par le biais de ButtonPanel lui-même. Parce que vous ajoutez loanAmt à ce bouton droit ?
Donc, si vous voulez accéder à loanAmt. Vous devez obtenir tous les composants sur le bouton du panneau. C'est mon psudeo code howto accéder à votre loanAmt de ButtonPanel classe.
ouais son cauchemar si le component swing jtextfield trouve imbriquée à l'intérieur du Panneau. Je suis d'accord avec votre solution 🙂
J'ai édité ton post (ajout d'un espace) afin que je puisse l'onu de faire de mon bas-vote. Je vous recommande de lire les liens dans mon commentaire ci-dessus car ils sont tout simplement incroyable et vraiment ouvert les yeux. Ils ont mis mes recommandations dans ma réponse à la honte.
OriginalL'auteur martinusadyh