Comment utiliser ActionListener sur une zone de liste déroulante à donner à une variable une valeur
Im en utilisant BlueJ et j'ai couru dans un problème. J'ai une liste déroulante avec 3 options. Chaque option est une chaîne de caractères. Les trois options sont à Jour, Semaine et Mois. Ce que je veux faire, c'est si le Jour est choisi qu'une variable est égal à 30 (un double) et ainsi de suite. Quelqu'un peut-il m'aider à acheter me dire comment faire pour donner "emailvalue" une valeur en fonction de l'option sélectionnée dans la liste déroulante?
EDIT: je vais ajouter mon code de programme qui est une des données mensuelles calculater. Il ne compiler.
Voici le code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.awt.image.*;
import java.awt.geom.*;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author (Andrew Napier, Sikander Singh)
* @version (December 18th, 2012)
*/
public class MonthlyData extends JFrame
{
private JLabel title, stitle, l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,l13,l14;
private JLabel l15,l16,l17,l18,l19,l20,l21,l22,l23,l24,l25,l26,l27,l28,l29;
private JLabel Usage,Estimated,solu1,solu2,total2;
private JPanel panel1, panel2, panel3, panel4, panel5, panel6, panel7;
String[] deviceStrings = { "Blackberry", "Other", "Internetstick"};
String[] date = { "Day", "Week", "Month"};
public double email2 = 0;
public double email1;
static final int email50 = 50;
static final int email100 = 100;
static final int email150 = 150;
static final int email200 = 200;
static final int email250 = 250;
static final int email300 = 300;
public JSlider Email = new JSlider(0,300,0);
public JSlider Web = new JSlider(0,500,0);
public JSlider IM = new JSlider(0,500,0);
public JSlider Video = new JSlider(0,300,0);
public JSlider Song = new JSlider(0,200,0);
public JSlider App_G = new JSlider(0,100,0);
public String currentdate;
public double emailvalue;
public MonthlyData ()
{
super ("MonthlyData");
setSize (1000,1100);
//////////////////////////////////////////////////////panel1
panel1 = new JPanel ();
panel1.setLayout (new GridLayout(1,1));
panel1.setVisible(true);
panel1.setBackground (Color.black);
title = new JLabel (" WANNA KNOW HOW MUCH DATA",JLabel.LEFT);
title.setForeground(Color.white);
title.setFont (new Font("Times New Roman",Font.BOLD,25));
l1 = new JLabel ("");
l2 = new JLabel ("");
///////////////////////////////////////////////panel2
panel2 = new JPanel ();
panel2.setLayout (new GridLayout(1,1));
panel2.setVisible(true);
panel2.setBackground (Color.gray);
stitle = new JLabel (" PICK A PHONE OR INTERNET STICK AND THEN DRAG THE .",JLabel.LEFT);
stitle.setForeground(Color.black);
stitle.setFont (new Font("Times New Roman",Font.BOLD,14));
////////////////////////////////////////////////panel3
panel3 = new JPanel ();
panel3.setLayout (new FlowLayout());
panel3.setVisible(true);
panel3.setBackground (Color.white);
l3 = new JLabel ("Select Your Device:",JLabel.RIGHT);
l3.setForeground(Color.red);
JComboBox devicelist = new JComboBox (deviceStrings);
l4 = new JLabel ("Tell us how much of what's listed here you think you'll use:");
/////////////////////////////////////////////////panel4
panel4 = new JPanel ();
panel4.setLayout (new GridLayout(6,7));
panel4.setVisible(true);
panel4.setBackground (Color.white);
l5 = new JLabel ("Email");
l6 = new JLabel ("WebPage");
l7 = new JLabel ("Instant Message");
l8 = new JLabel ("Streaming Video");
l9 = new JLabel ("Song");
l10 = new JLabel ("Application or Game");
l11 = new JLabel (""+" Emails");
final JComboBox date1 = new JComboBox (date);
date1.addActionListener(new ActionListener() {//add actionlistner to listen for change
@Override
public void actionPerformed(ActionEvent e) {
String s = (String) date1.getSelectedItem();//get the selected item
switch (s) {//check for a match
case "Day":
emailvalue = 30;
break;
case "Week":
emailvalue = 4;
break;
case "Month":
emailvalue = 1;
System.out.println("Month selected, emailvalue:" + emailvalue);
break;
}
}
});
l12 = new JLabel (" 0.002 MB");
l13 = new JLabel (""+email2+" MB");
double web1 = 0;
l14 = new JLabel (""+web1+" WebPages");
JComboBox date2 = new JComboBox (date);
l15 = new JLabel (" 0.07 MB");
double web2 = 0;
l16 = new JLabel (""+web2+" MB");
double IM1 = 0;
l17 = new JLabel (""+IM1+" IMs");
JComboBox date3 = new JComboBox (date);
l18 = new JLabel (" 0.005 MB");
double IM2 = 0;
l19 = new JLabel (""+IM2+" MB");
double video1 = 0;
l20 = new JLabel (""+video1+" Minutes");
JComboBox date4 = new JComboBox (date);
l21 = new JLabel (" 1 MB");
double video2 = 0;
l22 = new JLabel (""+video2+" MB");
double song1 = 0;
l23 = new JLabel (""+song1+" MP3's");
JComboBox date5 = new JComboBox (date);
l24 = new JLabel (" 4 MB");
double song2 = 0;
l25 = new JLabel (""+song2+" MB");
double app1 = 0;
l26 = new JLabel (""+app1+" App/Games");
JComboBox date6 = new JComboBox (date);
l27 = new JLabel (" 0.44 MB");
double app2 = 0;
l28 = new JLabel (""+app2+" MB");
////////////////////////////////////////////////panel5
panel5 = new JPanel ();
panel5.setLayout (new GridLayout(1,1));
panel5.setVisible(true);
panel5.setBackground (Color.white);
solu1 = new JLabel ("WE THINK YOUR MONTHLY DATA USAGE WILL BE:");
solu1.setForeground (Color.red);
solu1.setFont (new Font("Times New Roman",Font.BOLD,20));
double total = 0;
total2 = new JLabel (""+total+" MB");
total2.setForeground (Color.red);
total2.setFont (new Font("Times New Roman",Font.BOLD,20));
///////////////////////////////////////////panel6
panel6 = new JPanel ();
panel6.setLayout (new GridLayout (1,1));
panel6.setVisible (true);
panel6.setBackground (Color.white);
Usage = new JLabel ("Usage per unit");
Usage.setForeground (Color.red);
Estimated = new JLabel (" Estimated total");
Estimated.setForeground (Color.red);
//////////////////////////////////////////////panel7
panel7 = new JPanel ();
panel7.setLayout (new GridLayout (1,1));
panel7.setVisible (true);
panel7.setBackground (Color.white);
solu2 = new JLabel ("Data usage varies by device and other factors and the .");
solu2.setForeground (Color.black);
///////////////////////////////////////////////////Implements
Container container = getContentPane ();
container.setLayout (null); //changed
container.setBackground (Color.white);
container.add (panel1).setBounds (0,0,1000,120); //panel1
panel1.add (title).setSize(500,500);
container.add (panel2).setBounds (0,100,1000,120); //panel2
panel2.add (stitle);
container.add (panel3).setBounds (0,220,1000,100); //panel3
panel3.add (l3);
panel3.add (devicelist);
panel3.add (l4);
container.add (panel4).setBounds (0,340,1000,150); //panel4
Email.addChangeListener(new SliderHandler());
Web.addChangeListener(new SliderHandler());
IM.addChangeListener(new SliderHandler());
Video.addChangeListener(new SliderHandler());
Song.addChangeListener(new SliderHandler());
App_G.addChangeListener(new SliderHandler());
panel4.add (l5);
panel4.add (Email);
panel4.add (l11);
panel4.add (date1);
panel4.add (l12);
panel4.add (l13);
panel4.add (l6);
panel4.add (Web);
panel4.add (l14);
panel4.add (date2);
panel4.add (l15);
panel4.add (l16);
panel4.add (l7);
panel4.add (IM);
panel4.add (l17);
panel4.add (date3);
panel4.add (l18);
panel4.add (l19);
panel4.add (l8);
panel4.add (Video);
panel4.add (l20);
panel4.add (date4);
panel4.add (l21);
panel4.add (l22);
panel4.add (l9);
panel4.add (Song);
panel4.add (l23);
panel4.add (date5);
panel4.add (l24);
panel4.add (l25);
panel4.add (l10);
panel4.add (App_G);
panel4.add (l26);
panel4.add (date6);
panel4.add (l27);
panel4.add (l28);
container.add (panel5).setBounds (210,540,1000,50); //panel5
panel5.add (solu1);
panel5.add (total2);
container.add (panel6).setBounds (670,220,200,220); //panel6
panel6.add (Usage);
panel6.add (Estimated);
container.add (panel7).setBounds (210,580,530,50); //panel7
panel7.add (solu2);
Email.setOpaque(false);
Web.setOpaque(false);
IM.setOpaque(false);
Video.setOpaque(false);
Song.setOpaque(false);
App_G.setOpaque(false);
setVisible (true);
}
public static void main (String[] args)
{
MonthlyData application = new MonthlyData ();
}
public class SliderHandler implements ChangeListener
{
public void stateChanged(ChangeEvent e)
{
if (e.getSource().equals(Email))
{
l11.setText(""+Email.getValue());
email2= (Email.getValue() * 0.002);
l13.setText(email2 + "MB");
}
if (e.getSource().equals(Web))
{
l14.setText(""+Web.getValue());
}
if (e.getSource().equals(IM))
{
l17.setText(""+IM.getValue());
}
if (e.getSource().equals(Video))
{
l20.setText(""+Video.getValue());
}
if (e.getSource().equals(Song))
{
l23.setText(""+Song.getValue());
}
if (e.getSource().equals(App_G))
{
l26.setText(""+App_G.getValue());
}
}
}
public void paint (Graphics g)
{
super.paint(g);
}
}
OriginalL'auteur Sunny | 2013-01-13
Vous devez vous connecter pour publier un commentaire.
1) eh Bien, tout d'abord, vous auriez besoin d'un
ActionListener
ajouté à laJComboBox
à écouter pour l'élément sélectionné change.2) Dans les
actionPerformed(...)
deActionListener
obtenir l'élément sélectionné viagetSelectedItem()
et en fonte pour uneString
que la méthode renvoie unObject
.3) l'Utilisation d'un
switch
instruction pour vérifier lequel l'élément sélectionné correspond à je.e le jour, le mois,la semaine et que d'attribuer une valeur en conséquence.Par exemple:
Mise à JOUR:
Après l'ajout d'un SSCCE et commenté:
Le problème est
Sur le début jusqu'à la
emailvalue
n'est pas encore fixé. Il ne sera définie que sur le premier temps de l'élément sélectionné/indice est changé.Pour résoudre cela, il faut simplement lui donner une valeur sélectionnée par défaut en appelant
setSelectedItem(..)
avant son visible:Suggestions dans votre code:
Swing composants doivent être créés et manipulés sur
HAE
viaSwingUtilities.invokeLater(Runnable r)
bloc.Ne pas remplacer
paint(..)
deJFrame
plutôt ajouterJPanel
et remplacerpaintComponent(Graphics g)
Ne pas appeler
setBounds
ousetSize
plutôt d'utiliser desLayoutManager
et/ou de remplacer lesgetPreferredSize()
deJPanel
et retourDimension
s qui fit de son contenu que de demander unpack()
surJFrame
avant de le mettre visible.Ne pas étendre
JFrame
inutilementNe pas mettre en œuvre
ActionListener
sur la classe, à moins que la classe va être utilisé comme un seul, ou de ses méthodes doivent être exposés à d'autres classesNon c'est une mauvaise pratique que nous devrions seulement d'étendre une classe, si nous voulons ajouter des fonctionnalités qui n'existent déjà/est au-delà des capacités par le biais de simples appels de méthode. Aussi vu que vous êtes nouveau, veuillez lire sur: Comment accepter une réponse travailler? cette mesure va s'appliquer une fois que vous avez trouvé une solution convenable.
Lors de l'utilisation de votre code, ce qui ne l' @override?
Elle fait en sorte que le compilateur sait que nous sommes substituant à une méthode d'une autre classe. Ainsi, si nous n'avons pas surcharger la méthode correctement je.e, nous avons mis le mauvais nom ou quelque chose, une erreur de compilation sera donnée que nous avons ajouté la
@Override
annotation. Si nous n'avons pas, il aurait compilé et supposé nous aded une nouvelle méthode. Voir here pour en savoir plusFait, et accepté votre réponse.
OriginalL'auteur David Kroukamp
Simplement avoir une carte et l'utiliser dans la sélection de l'auditeur.
OriginalL'auteur vels4j
Ajouter un
actionListener
à laJComboBox
:Depuis votre classe implémente déjà
ActionListener
, vous pouvez le faire aussi bien (comme une alternative à la ci-dessus):Ajouter un
actionCommand
à votreJComboBox
:Remarque:
date1
devrait être une classe de niveau variable (champ), de sorte qu'il est accessible à laactionPerformed
méthode.Ajouter un
actionPerformed
méthode à la classe (vous avez probablement déjà).Vous avez besoin d'avoir
date1.addActionListener(this)
(ajouté à la réponse). Pour cette date1 devrait être une classe de niveau variable.J'ai essayé votre deuxième réponse et j'obtiens un message d'erreur qui dit des types incompatibles et il met en évidence la Chaîne de selectedItem = date1.getselectedItem();
-1 pour uncompilable code après l'OP a dit que sa ne fonctionne pas donner la ligne et tous les. @Sunny Merci de voir ma réponse vous devriez jeter la valeur retournée pour un
String
comme dit dans ma réponse (la méthode renvoie unObject
) comme suit:String selectedItem = (String)date1.getselectedItem();
Vous avez besoin de jeter à la Chaîne comme getSelectedItem retourne un Objet. J'ai mis à jour le code. @ DavidKroukamp La réponse est simplement un pointeur vers la bonne approche. De base des erreurs du compilateur doit être facile à résoudre. Mon intention n'est pas de fournir des code de travail. Mon intention est de fournir la bonne approche.
OriginalL'auteur Nivas
c'est juste un exemple
OriginalL'auteur driss