Comment Désactiver le Bouton GUI en Java
j'ai donc ce petit morceau de code pour mon GUI:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.BoxLayout;
import javax.swing.JSeparator;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class IPGUI extends JFrame implements ActionListener
{
private static JPanel contentPane;
private static boolean btn1Clicked = false;
private static boolean btn2Clicked = false;
private static boolean btn3Clicked = false;
private static boolean btn4Clicked = false;
//Create the frame
public IPGUI()
{
//Sets frame properties
setTitle("IP Extractor");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 250, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
//Creates new JPanel with boxlayout
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
//////////////////New Button//////////////////
JButton btnConvertDocuments = new JButton("1. Convert Documents");
btnConvertDocuments.setAlignmentX(Component.CENTER_ALIGNMENT);
btnConvertDocuments.setMaximumSize(new Dimension(160, 0));
btnConvertDocuments.setPreferredSize(new Dimension(0, 50));
panel.add(btnConvertDocuments);
btnConvertDocuments.setActionCommand("w");
btnConvertDocuments.addActionListener((ActionListener) this);
if (btn1Clicked == true)
{
btnConvertDocuments.setEnabled(false);
}
JSeparator separator_3 = new JSeparator();
panel.add(separator_3);
//////////////////New Button//////////////////
JButton btnExtractImages = new JButton("2. Extract Images");
btnExtractImages.setAlignmentX(Component.CENTER_ALIGNMENT);
btnExtractImages.setMaximumSize(new Dimension(160, 0));
btnExtractImages.setPreferredSize(new Dimension(0, 50));
panel.add(btnExtractImages);
btnExtractImages.setActionCommand("x");
btnExtractImages.addActionListener((ActionListener) this);
if (btn2Clicked == true)
{
btnExtractImages.setEnabled(false);
}
JSeparator separator_2 = new JSeparator();
panel.add(separator_2);
//////////////////New Button//////////////////
JButton btnParseRIDValues = new JButton("3. Parse rId Values");
btnParseRIDValues.setAlignmentX(Component.CENTER_ALIGNMENT);
btnParseRIDValues.setMaximumSize(new Dimension(160, 0));
btnParseRIDValues.setPreferredSize(new Dimension(0, 50));
panel.add(btnParseRIDValues);
btnParseRIDValues.setActionCommand("y");
btnParseRIDValues.addActionListener((ActionListener) this);
if (btn3Clicked == true)
{
btnParseRIDValues.setEnabled(false);
}
JSeparator separator_1 = new JSeparator();
panel.add(separator_1);
//////////////////New Button//////////////////
JButton btnParseImageInfo = new JButton("4. Parse Image Info.");
btnParseImageInfo.setAlignmentX(Component.CENTER_ALIGNMENT);
btnParseImageInfo.setMaximumSize(new Dimension(160, 0));
btnParseImageInfo.setPreferredSize(new Dimension(0, 50));
panel.add(btnParseImageInfo);
btnParseImageInfo.setActionCommand("z");
btnParseImageInfo.addActionListener((ActionListener) this);
if (btn4Clicked == true)
{
btnParseImageInfo.setEnabled(false);
}
}
public void actionPerformed(ActionEvent event)
{
String command = event.getActionCommand();
if (command.equals("w"))
{
FileConverter fc = new FileConverter();
btn1Clicked = true;
}
else if (command.equals("x"))
{
ImageExtractor ie = new ImageExtractor();
btn2Clicked = true;
}
else if (command.equals("y"))
{
XMLIDParser xip = new XMLIDParser();
btn3Clicked = true;
}
else if (command.equals("z"))
{
XMLTagParser xtp = new XMLTagParser();
btn4Clicked = true;
}
}
}
La partie, je veux me concentrer plus précisément, est-ce conditionnelle:
if (btn1Clicked == true)
{
btnConvertDocuments.setEnabled(false);
}
Donc, ma conviction est que cette commande doit faire est: une fois que l'utilisateur clique sur le bouton et l'action effectuée méthode est appelée, btnClicked doit être défini à true, ainsi que le bouton doit alors être désactivée.
Quelqu'un peut m'expliquer où vais-je mal ici, ou si j'ai la bonne idée ici? Je vous remercie à l'avance pour toute entrée!
Vous n'avez pas indiqué si ce n'est pas faire ce que vous voulez. Je knw c'est évident, mais ce qui se passe lorsque vous cliquez sur le bouton? Toutes les erreurs?
Il n'a tout simplement pas de désactiver le bouton, l'utilisateur est autorisé à plusieurs reprises, cliquez sur le bouton (que je ne veux pas). Cependant, j'ai corrigé maintenant. Merci bien :).
voir ma réponse ci-dessous
Il n'a tout simplement pas de désactiver le bouton, l'utilisateur est autorisé à plusieurs reprises, cliquez sur le bouton (que je ne veux pas). Cependant, j'ai corrigé maintenant. Merci bien :).
voir ma réponse ci-dessous
OriginalL'auteur This 0ne Pr0grammer | 2011-07-26
Vous devez vous connecter pour publier un commentaire.
Vous devriez mettre de la déclaration
btnConvertDocuments.setEnabled(false);
dans leactionPerformed(ActionEvent event)
méthode. Votre conditionnelle ci-dessus seulement obtenir de l'appel, une fois dans le constructeur lors de la IPGUI objet est instancié.Puis faire
btnConvertDocuments
une variable d'instance. N'en faites pas statique.Fait. Merci beaucoup!
OriginalL'auteur user802421
vraiment pas possible de désactiver
JComponent(s)
si la sortie de l'interface graphique est appelé à partir deListener
, dans tous les cas, tous les événements sont à l'intérieur de l'EDT, y comprissetEnabled/setVisible
,JComponent(s)
est/sont désactivés/visible que si tous les Événements dans l'EDT se termine,il y a t-il des moyens
1/safiest serait de chercher GlassPane, ce qui empêche après tout
MouseEvents
(pas
KeyEvents
) le meilleur code de autour de par les camickr de l'2/utiliser le multithreading avec
SwingWorker
pour séparer et de retard de béton événement(s),Action from JComponent -> disable JComponent(s) in GUI -> then required Action
, mais il y a (si c'est possible d'ajoute de), vous devez identifier toutes les actions en utilisantmyAction#putProperty("String","String")
3/mettre
Enabled/Visible
à lainvokeLater()
et toutes les actions de l'Auditeur doit être enveloppé dansinvokeAndWait()
4/à l'intérieur de
Runnable()#Thread
OriginalL'auteur mKorbel
Plutôt que d'utiliser des booléens, pourquoi ne pas juste mettre le bouton sur la valeur false lorsque son cliqué, alors vous n'avez que dans votre méthode actionPerformed. Son plus efficace..
OriginalL'auteur DaMainBoss
Vous créez l'image avec le bouton activer, faire quelques test pour voir si btn1Cliked est vrai, et c'est tout.
Ensuite, vous avez la méthode actionPerformed qui ne fait rien avec votre bouton. Donc, si vous n'avez pas de toute action liée, votre état de bouton ne sera jamais évalué de nouveau.
OriginalL'auteur woliveirajr
Est-il une raison pour laquelle vous ne faites pas quelque chose comme:
La
if
déclaration auprès de la désactivation de votre code ne sera pas appelée à moins que vous continuez à l'appeler leIPGUI
constructeur.Content d'avoir pu aider!
OriginalL'auteur ssell
Une fois que vous avez créé à l'image de la partie du code avec votre conditionnelle n'est pas entré. Pour le dire d'une autre façon, à la fois que vous exécutez le test
if (btn1Clicked == true)
, le bouton a non seulement pas été cliqué pourtant, il n'a même pas été affiché à l'utilisateur.Perdre les opérations booléennes et déplacer la ligne avec le
btnConvertDocuments.setEnabled(false)
dans votre actionListener. Rendre les boutons variables d'instance, ne font pas d'eux des variables statiques. (Alternativement, vous pouvez garder les boutons comme des variables locales et attribuer à chacun d'eux leur propre anonyme intérieur de la classe listener.)OriginalL'auteur Nathan Hughes
Voici la solution que j'ai trouvé grâce à l'aide de tous. Merci encore à tous pour vos commentaires, vraiment l'apprécier!
OriginalL'auteur This 0ne Pr0grammer
Plutôt que d'utiliser des booléens, pourquoi ne pas juste mettre le bouton sur la valeur false lorsque son cliqué, alors vous n'avez que dans votre méthode actionPerformed. Son plus efficace..
OriginalL'auteur iman hoshmand