tekstvak laten inlezen voor pull down menu

Status
Niet open voor verdere reacties.

JavaNerd

Gebruiker
Lid geworden
24 jan 2009
Berichten
23
Heren en dames,

Ik had even een vraagje over een pull down menu. Wanneer je op 'iets' klikt in het pull down menu hoe kan je er dan voor zorgen dat dat 'iets' in een tekstvak wordt geschreven.

Dus BV) uit het pull down menu klik je op Dollar en dan wordt die Dollar weergeven in een tekstvak.

BV) een stukje code van mijn pull down menu'
Code:
	Lijst = new Choice();
	    Lijst.add("Euro");
	    Lijst.add("$US");
	    Lijst.add("YEN");
	    Lijst.add("MM$");

		Lijst.setBounds(50,140,80,20);
		add(Lijst);

Is het ook mogelijk als je meerdere namen hebt in het pull down menu en die in een array te plaatsen?

bvd,
 
Laatst bewerkt:
Door een Listener te gebruiken veronderstel ik... Zelfde systeem als bij een gewone knop...
 
dus dan zal het iets als zo moeten zijn;
Code:
Lijst = new Choice();
    Lijst.add("Euro");
    Lijst.add("$US");
    Lijst.add("YEN");
    Lijst.add("MM$");

    Lijst.setBounds(50,140,80,20);
    Lijst.addActionListener(new invKnopHandler());
   add(Lijst);

Maar wanneer ik dit dus invoer dan krijg ik een foutmelding.


Maar alsnog het lijkt mij handig als je die valuta's in een array list stopt dat is tog veel makkelijker of? En hoe zou je dat dan in een array moeten stoppen?
 
Code:
package javaapplication35;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Main {

    public static void main(String[] args) { 
        final JFrame f = new JFrame();
        f.getContentPane().add(new ComboBoxPanel());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationByPlatform(true);
        f.pack();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                f.setVisible(true);
            }
        });
    }

    public static class ComboBoxPanel extends JPanel {

        private ComboBoxPanel() {
            final JTextField tekstveld = new JTextField();
            final String[] values = new String[] {"USD","EUR","GBP","YEN","DKK"};
            final JComboBox lijst = new JComboBox(values);

            lijst.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    tekstveld.setText((String)lijst.getSelectedItem());
                }
            });

            this.setLayout(new GridLayout(2,1));
            this.add(tekstveld);
            this.add(lijst);
        }
       
        
    }
}

Hier is een lijst aangemaakt met een array of Strings. De functie getSelectedItem() zal het geselecteerde object terug geven in dit geval dus een String. Dit String object kan ik gebruiken om de tekstbox te vullen.
 
hey tof dat werkt en ziet er goed uit.
Is het ook mogelijk wanneer je op een valuta klikt dat ook de waarde van het getal wordt weergeven in een ander tekstvak.

Volgens mij ga je dan met een switch functie werken, maar weet dat niet helemaal zeker.

bv in deze code die ik nu heb;
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

//======opstart class
public class Box extends JFrame
{
	public static void main(String[] args)
	{// make een frame
	 JFrame frame = new Box();
	 frame.setSize(600,500);
	 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	 frame.setTitle("Box koers");

	 JPanel Dummypaneel = new DummyPaneel();
	 frame.setContentPane(Dummypaneel);
	 frame.setVisible(true);
	 frame.setLocation(400,200);

	String[] valuta = new String[4];
	valuta[0] = "Euro";
	valuta[1] = "$US";
	valuta[2] = "YEN";
	valuta[3] = "DDK";
	}
}
class DummyPaneel extends JPanel
{
  // declaratie comp & vars
JLabel invoerLabel,invoerCurLabel,invoerRateLabel,uitvoerLabel,uitvoerCurLabel,uitvoerRateLabel;
JTextField invoerVak,invoerVakCur,invoerRateVak,uitvoerVak,uitvoerVakCur,uitvoerRateVak;
JButton Knop;
Choice Lijst;

	  public DummyPaneel()
	  {
		  setLayout(null);
		  //de labels boven
		  invoerLabel = new JLabel("invoerbedrag:");
		  invoerLabel.setBounds(50,50,100,50);
		  	add(invoerLabel);

		  invoerCurLabel = new JLabel("invoercurrency:");
		  invoerCurLabel.setBounds(200,50,100,50);
		  	add(invoerCurLabel);

		  invoerRateLabel = new JLabel("invoerrate:");
		  invoerRateLabel.setBounds(350,50,100,50);
		  	add(invoerRateLabel);

		 //de vakken boven
		 invoerVak = new JTextField("");
		 invoerVak.setBounds(50,100,80,20);
		  	add(invoerVak);

		 invoerVakCur = new JTextField("");
		 invoerVakCur.setBounds(200,100,80,20);
		 invoerVakCur.setEnabled(false);
		 	add(invoerVakCur);

		 invoerRateVak = new JTextField("");
		 invoerRateVak.setBounds(350,100,80,20);
		 invoerRateVak.setEnabled(false);
		 	add(invoerRateVak);

		//de knop
		Knop = new JButton("Bereken");
		Knop.setBounds(350,150,90,50);

		Knop.addActionListener(new invKnopHandler());
			add(Knop);

		 //de labels onder
		 uitvoerLabel = new JLabel("uitvoerbedrag:");
		 uitvoerLabel.setBounds(50,200,100,50);
		  	add(uitvoerLabel);

		 uitvoerCurLabel = new JLabel("uitvoercurrency:");
		 uitvoerCurLabel.setBounds(200,200,100,50);
		 	add(uitvoerCurLabel);

		 uitvoerRateLabel = new JLabel("uitvoerrate:");
		 uitvoerRateLabel.setBounds(350,200,100,50);
		 	add(uitvoerRateLabel);

		 //de vakken onder
		 uitvoerVak = new JTextField("");
		 uitvoerVak.setBounds(50,250,80,20);
		 	add(uitvoerVak);

		 uitvoerVakCur = new JTextField("");
		 uitvoerVakCur.setBounds(200,250,80,20);
		 uitvoerVakCur.setEnabled(false);
		 	add(uitvoerVakCur);

		 uitvoerRateVak = new JTextField("");
		 uitvoerRateVak.setBounds(350,250,80,20);
		 uitvoerRateVak.setEnabled(false);
		 	add(uitvoerRateVak);

		//Linker pull down menu voor invoercurrency
		Lijst = new Choice();
		Lijst.add("Euro");
	                     Lijst.add("$US");
	                     Lijst.add("YEN");
	                     Lijst.add("DDK");

		Lijst.setBounds(50,140,80,20);
	    	  add(Lijst);
	  }

	  public void paintComponent(Graphics g)
	  { //teken/kleur tekst/comp
	  	g.drawRect(20,20,500,350);
	  }

  class invKnopHandler implements ActionListener
  {
	  public void actionPerformed(ActionEvent e)
	  {
	  }
  }
}

En ik vraag me ook af of ik de array list goed heb gedifinieerd of zou die anders in de Class Dummupaneel moeten komen?

thx
 
Het mooiste is om een klasse aan te maken voor je munt. In deze klasse zet je dan naam van de munt en de waarde.

Je Combox vul je in dit geval niet met Strings maar met Munten. De ComboBox zal de toString() functie van munt gebruiken om de tekst van je lijst te vullen.

Het handige aan deze methode is dat getSelectedItem() nu een Munt teruggeeft en in deze munt klasse bevat de waarde, die je met getWaarde() terug kan krijgen...

Er zijn veel manieren om een array te vullen, die met {} is korter en je hoeft zelf niet uittezoeken hoe groot de array moet worden.... Maar dit methode van jou is ook goed.

je moet opletten met je variable en klasse namen:

JPanel Dummypaneel = new DummyPaneel(); levert strafpunten op...
JPanel muntPanel = new MuntPaneel() ; is vell beter... gebruik nooit naam Dummy.


Code:
package javaapplication35;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Main {

    final static Munt EURO = new Munt("EUR",1.00);
    final static Munt DOLAR = new Munt("USD",0.75);
    final static Munt DEENSE_KROON = new Munt("DKK",0.13);

    public static void main(String[] args) { 
        final JFrame f = new JFrame();
        f.getContentPane().add(new ComboBoxPanel());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationByPlatform(true);
        f.pack();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                f.setVisible(true);
            }
        });
    }

    public static class ComboBoxPanel extends JPanel {

        private ComboBoxPanel() {
            final JTextField tekstveld = new JTextField();
            final Munt[] values = new Munt[] {EURO,DOLAR,DEENSE_KROON};
            final JComboBox lijst = new JComboBox(values);

            lijst.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    Munt geselecteerdeMunt = (Munt) lijst.getSelectedItem();
                    tekstveld.setText("waarde: " + geselecteerdeMunt.getWaarde());
                }
            });

            this.setLayout(new GridLayout(2,1));
            this.add(tekstveld);
            this.add(lijst);
        }
    }

    public static class Munt {
        private String naam;
        private double waarde;

        public Munt(String naam, double waarde) {
            this.naam = naam;
            this.waarde = waarde;
        }

        @Override
        public String toString() {
            return naam; 
        }

        public double getWaarde() {
            return waarde;
        }

    }
}
 
En als ik die 2 nou wil samenvoegen. Dus een extra tekstvak.
Je klikt bv) op euro dan krijg je in het een tekstvak "euro" te zien en in het andere tekstvak het bedrag te zien.
Hoe moet ik die 2 dan samen voegen wordt dat zoiets dan?
Code:
//package javaapplication35;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class blad1 extends JFrame {

    final static Munt EURO = new Munt("EUR",1.00);
    final static Munt DOLAR = new Munt("USD",0.75);
    final static Munt YEN = new Munt("YEN",0.13);
    final static Munt MMS = new Munt("DDK",1000);

    public static void main(String[] args) {
        final JFrame blad1 = new JFrame();
        blad1.getContentPane().add(new ComboBoxPanel());
        blad1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        blad1.setLocationByPlatform(true);
        blad1.pack();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                blad1.setVisible(true);
            }
        });
    }

    public static class ComboBoxPanel extends JPanel {

        private ComboBoxPanel() {
            final JTextField tekstveld = new JTextField();
            final JTextField vak2 = new JTextField();
            final Munt[] values = new Munt[] {EURO,DOLAR,YEN,DDK};
            final String [] namen = new String[] {"EUR","USD","YEN","DDK"};
            final JComboBox lijst = new JComboBox(values);

            lijst.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    Munt geselecteerdeMunt = (Munt) lijst.getSelectedItem();
                    tekstveld.setText("" + geselecteerdeMunt.getWaarde());
                    Namen geselecteerdenamen = (Munt) lijst.getSelectedItem();
                    vak2.setText("" + geselecteerdeMunt.getWaarde());
                    vak2.setText((String)lijst.getSelectedItem());
                }
            });

            this.setLayout(new GridLayout(2,1));
            this.add(tekstveld);
            this.add(vak2);
            this.add(lijst);
        }
    }

    public static class Munt {
        private String naam;
        private double waarde;

        public Munt(String naam, double waarde) {
            this.naam = naam;
            this.waarde = waarde;
        }

        @Override
        public String toString() {
            return naam;
        }

        public double getWaarde() {
            return waarde;
        }

    }
}
 
Ik heb een screenshot achter kunnen halen en het moet er ongeveer zo uit zien.
Dus wanneer je op euro klikt komt er euro te staan + de waarde van de euro.
Als je op Dollar klikt komt er te staan Dollar + de waarde van de dollar.



En de code ziet er dan als volgt uit;
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

//======opstart class
public class currency extends JFrame
{
	public static void main(String[] args)
	{// make een frame
	 JFrame frame = new currency();
	 frame.setSize(600,500);
	 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	 frame.setTitle("Currency");

	 JPanel MUNT= new MuntPaneel();
	 frame.setContentPane(Dummypaneel);
	 frame.setVisible(true);
	 frame.setLocation(400,200);
	}
}
class MuntPaneel extends JPanel
{
  //== declaratie comp & vars
JLabel invoerLabel,invoerCurLabel,invoerRateLabel,uitvoerLabel,uitvoerCurLabel,uitvoerRateLabel,tekst;
JTextField invoerVak,invoerVakCur,invoerRateVak,uitvoerVak,uitvoerVakCur,uitvoerRateVak;
JButton Knop;
Choice Lijst,Lijst2;
int index,index2;

	  public DummyPaneel()
	  {
		  setLayout(null);
		  //de labels boven
		  invoerLabel = new JLabel("invoerbedrag:");
		  invoerLabel.setBounds(50,50,100,50);
		  	add(invoerLabel);

		  invoerCurLabel = new JLabel("invoercurrency:");
		  invoerCurLabel.setBounds(200,50,100,50);
		  	add(invoerCurLabel);

		  invoerRateLabel = new JLabel("invoerrate:");
		  invoerRateLabel.setBounds(350,50,100,50);
		  	add(invoerRateLabel);

		 //de vakken boven
		 invoerVak = new JTextField("");
		 invoerVak.setBounds(50,100,80,20);
		  	add(invoerVak);

		 invoerVakCur = new JTextField("");
		 invoerVakCur.setBounds(200,100,80,20);
		 invoerVakCur.setEnabled(false);
		 	add(invoerVakCur);

		 invoerRateVak = new JTextField("");
		 invoerRateVak.setBounds(350,100,80,20);
		 invoerRateVak.setEnabled(false);
		 	add(invoerRateVak);

		//de knop
		Knop = new JButton("Bereken");
		Knop.setBounds(350,150,90,50);

		Knop.addActionListener(new invKnopHandler());
			add(Knop);

		 //de labels onder
		 uitvoerLabel = new JLabel("uitvoerbedrag:");
		 uitvoerLabel.setBounds(50,200,100,50);
		  	add(uitvoerLabel);

		 uitvoerCurLabel = new JLabel("uitvoercurrency:");
		 uitvoerCurLabel.setBounds(200,200,100,50);
		 	add(uitvoerCurLabel);

		 uitvoerRateLabel = new JLabel("uitvoerrate:");
		 uitvoerRateLabel.setBounds(350,200,100,50);
		 	add(uitvoerRateLabel);

		 //de vakken onder
		 uitvoerVak = new JTextField("");
		 uitvoerVak.setBounds(50,250,80,20);
		 	add(uitvoerVak);

		 uitvoerVakCur = new JTextField("");
		 uitvoerVakCur.setBounds(200,250,80,20);
		 uitvoerVakCur.setEnabled(false);
		 	add(uitvoerVakCur);

		 uitvoerRateVak = new JTextField("");
		 uitvoerRateVak.setBounds(350,250,80,20);
		 uitvoerRateVak.setEnabled(false);
		 	add(uitvoerRateVak);

		//Linker pull down menu voor invoercurrency
		Lijst = new Choice();
		Lijst.add("Euro");
	    Lijst.add("$US");
	    Lijst.add("YEN");
	    Lijst.add("MM$");

		Lijst.addItemListener (new KeuzeHandler () );
		Lijst.setBounds(50,140,80,20);
		add(Lijst);

		//Rechter pull down menu voor uitvoercurrency
		Lijst2 = new Choice();
		Lijst2.add("Euro");
		Lijst2.add("$US");
		Lijst2.add("YEN");
	    Lijst2.add("MM$");

	//	Lijst2.addItemListener (new KeuzeHandler () );
	    Lijst2.setBounds(200,140,80,20);
	    add(Lijst2);

	    //label tekst
	    tekst = new JLabel("Van / Naar");
		tekst.setBounds(140,130,80,50);
		  	add(tekst);

		 String[] valuta = new String[4];
		 valuta[0] = "Euro";
		 valuta[1] = "$US";
		 valuta[2] = "YEN";
		 valuta[3] = "MMS$";
	  }

	  public void paintComponent(Graphics g)
	  { //teken/kleur tekst/comp
	  	g.drawRect(20,20,500,350);

	  	switch(index)
	  	{
		}
	  }

  //======knopHandler class

  class invKnopHandler implements ActionListener
  {
	  public void actionPerformed(ActionEvent e)
	  {
		  index = Lijst.getSelectedIndex();
		  index2 = Lijst2.getSelectedIndex();
		  repaint();
	  }
  }

  class KeuzeHandler implements ItemListener
  {
	  public void itemStateChanged(ItemEvent e)
	  {
	  }
  }
}
 
Als je gaat copy-pasten tussen twee projecten moet je wel opletten wat je doet. Deze code krijg je nooit gecompileerd !

- Waarom gebruik je Choice ? en niet een JComboBox ?.
- frame.setVisible(true); mag eigenlijk niet in main(), maar ala..


Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

//======opstart class
public class currency extends JFrame  //moet zijn "Currency"
{
	public static void main(String[] args)
	{// make een frame
	 JFrame frame = new currency();
	 frame.setSize(600,500);
	 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	 frame.setTitle("Currency");

	 JPanel MUNT= new MuntPaneel();  //MUNT -> muntPaneel
	 frame.setContentPane(Dummypaneel);  ??? -> muntPaneel
	 frame.setVisible(true); 
	 frame.setLocation(400,200);
	}
}
class MuntPaneel extends JPanel
{
  //== declaratie comp & vars
JLabel invoerLabel,invoerCurLabel,invoerRateLabel,uitvoerLabel,uitvoerCurLabel,uitvoerRateLabel,tekst;
JTextField invoerVak,invoerVakCur,invoerRateVak,uitvoerVak,uitvoerVakCur,uitvoerRateVak;
JButton Knop;
Choice Lijst,Lijst2; // Waar komt de klasse Choice vandaan ?
int index,index2;

	  public DummyPaneel() // dit is constructor van je klas, dus zeker geen DummyPaneel
	  {
		  setLayout(null);
		  //de labels boven
		  invoerLabel = new JLabel("invoerbedrag:");
		  invoerLabel.setBounds(50,50,100,50);
		  	add(invoerLabel);

		  invoerCurLabel = new JLabel("invoercurrency:");
		  invoerCurLabel.setBounds(200,50,100,50);
		  	add(invoerCurLabel);

		  invoerRateLabel = new JLabel("invoerrate:");
		  invoerRateLabel.setBounds(350,50,100,50);
		  	add(invoerRateLabel);

		 //de vakken boven
		 invoerVak = new JTextField("");
		 invoerVak.setBounds(50,100,80,20);
		  	add(invoerVak);

		 invoerVakCur = new JTextField("");
		 invoerVakCur.setBounds(200,100,80,20);
		 invoerVakCur.setEnabled(false);
		 	add(invoerVakCur);

		 invoerRateVak = new JTextField("");
		 invoerRateVak.setBounds(350,100,80,20);
		 invoerRateVak.setEnabled(false);
		 	add(invoerRateVak);

		//de knop
		Knop = new JButton("Bereken");
		Knop.setBounds(350,150,90,50);

		Knop.addActionListener(new invKnopHandler());
			add(Knop);

		 //de labels onder
		 uitvoerLabel = new JLabel("uitvoerbedrag:");
		 uitvoerLabel.setBounds(50,200,100,50);
		  	add(uitvoerLabel);

		 uitvoerCurLabel = new JLabel("uitvoercurrency:");
		 uitvoerCurLabel.setBounds(200,200,100,50);
		 	add(uitvoerCurLabel);

		 uitvoerRateLabel = new JLabel("uitvoerrate:");
		 uitvoerRateLabel.setBounds(350,200,100,50);
		 	add(uitvoerRateLabel);

		 //de vakken onder
		 uitvoerVak = new JTextField("");
		 uitvoerVak.setBounds(50,250,80,20);
		 	add(uitvoerVak);

		 uitvoerVakCur = new JTextField("");
		 uitvoerVakCur.setBounds(200,250,80,20);
		 uitvoerVakCur.setEnabled(false);
		 	add(uitvoerVakCur);

		 uitvoerRateVak = new JTextField("");
		 uitvoerRateVak.setBounds(350,250,80,20);
		 uitvoerRateVak.setEnabled(false);
		 	add(uitvoerRateVak);

		//Linker pull down menu voor invoercurrency
		Lijst = new Choice();
		Lijst.add("Euro");
	    Lijst.add("$US");
	    Lijst.add("YEN");
	    Lijst.add("MM$");

		Lijst.addItemListener (new KeuzeHandler () );
		Lijst.setBounds(50,140,80,20);
		add(Lijst);

		//Rechter pull down menu voor uitvoercurrency
		Lijst2 = new Choice();
		Lijst2.add("Euro");
		Lijst2.add("$US");
		Lijst2.add("YEN");
	    Lijst2.add("MM$");

	//	Lijst2.addItemListener (new KeuzeHandler () );
	    Lijst2.setBounds(200,140,80,20);
	    add(Lijst2);

	    //label tekst
	    tekst = new JLabel("Van / Naar");
		tekst.setBounds(140,130,80,50);
		  	add(tekst);

		 String[] valuta = new String[4];
		 valuta[0] = "Euro";
		 valuta[1] = "$US";
		 valuta[2] = "YEN";
		 valuta[3] = "MMS$";  //valuta gebruik je nergens. 
	  }

	  public void paintComponent(Graphics g) // onzin... paintComponent gebruik je alleen als je zelf iets wil tekenen.
	  { //teken/kleur tekst/comp
	  	g.drawRect(20,20,500,350);

	  	switch(index)
	  	{
		}
	  }

  //======knopHandler class

  class invKnopHandler implements ActionListener
  {
	  public void actionPerformed(ActionEvent e)
	  {
		  index = Lijst.getSelectedIndex();
		  index2 = Lijst2.getSelectedIndex();
		  repaint();
	  }
  }

  class KeuzeHandler implements ItemListener
  {
	  public void itemStateChanged(ItemEvent e)
	  {
	  }
  }
}
 
Het is mij gelukt om de applicatie werkend te krijgen.
Je maakt gewoon een switch aan en als er op Euro wordt geklikt komt er Euro te staan.
Eigenlijk dezelfde volgorde die in de Choice staat en die zet je dan in de switch functie.
Code:
switch(index)
{
   case 0:  invoerVakCur.setText("EURO");
   rateGetal = 1.50;
   break;
   case 1: invoerVakCur.setText("US$");
   rateGetal = 0.67;
   break;
   case 2: invoerVakCur.setText("YEN");
   rateGetal = 137.97;
   break;
   case 3: invoerVakCur.setText("MM$");
   rateGetal = 2000.00;
   default:
}

En de index heb je natuurlijk gedeclareerd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan