JComboBox

girl2005

Erfahrenes Mitglied
hi Leute,

ich habe eine JFrame, die ( ein JCombox und einen leeren JPanel ) enthält.
wie kann ich einen Programm so schreiben, dass wenn ich auf einen Item in JComboBox clicke tauchte eine Tabelle in den Panel auf?

auf jede Hilfe wäre ich sehr dankbar !
 
Um dir vielleicht einen kleinen Anstoß zu geben:
Registriere deine JComboBox bei einem ItemListener :
Code:
comboBox.addItemListener(new ItemListener() {
      public void itemStateChanged(ItemEvent e)  {
            clickedObject = e.getItem();
             .....
      }
}

Du könntest jetzt if abfragen starten um herauszufinden, welche Table nun sichtbar gemacht werden soll.. oder eleganter ( find ich jedenfalls) , du nutzt ne hashtable:
Code:
JTable table = hashtable.get(clickedObject);
table.setVisible(true);
Die nun nicht mehr genutzt Tabelle kannst du ja nun wieder unsichtbar machen...
Damit das nun alles klappt, kannst solltest du zuanfangs alle Tabellen unsichtbar im JPanel ablegen und natürlich auch in der hashtable..


Bei weiteren Frage.. weiterfragen ;)

*grüssle*
MeinerEiner
 
Was mir gerade noch eingefallen ist,
du könntest dem JPanel auch ein CardLayout zuweisen. Dieses sorgt dafür, das immer nur eine Table sichtbar ist... ist vielleicht eleganter als die Tables dauernd sichtbar/unsichtbar zu machen...
 
Moin,
mitunter ist auch ein ActionListener an Stelle des ItemListener sinnvoll, je nachdem, welches Verhalten gewünscht ist.
 
Hallo zusammen,

Vielen Danke für die Antworten.
cardLayout :ich kann mich mit cardLayout gar nicht aus. habe versucht im Internet nach Beispiele zu schauen. habe nicht genau verstanden
lIemListener und ActionListener habe versucht mit 2 Tabellen und 2 Elemente in dem ComboBox zu arbeiten. aber das ganze fonktioniert nicht.
könnte ihr mir das gsnze programm schreiben, ich meine mit 2 Elemente in dem ComboBox une 2 Tabellen. wäre ich sehr dankbar.
das Problem ist : ich habe auch einen groessen Mangel an die Java - Sprache .
 
Wenn du Probleme mit Java hast, wird es dir ja auch nix bringen wenn ich oder jemand anders das Programm schreiben.. wo bleibt da der Lerneffekt?!
Hast du dir denn schonmal die Sun Tutorials angesehen? Und Java ist auch eine Insel bietet auch eine gute Einführung in die Sprache..

Zu deinem Problem.. Poste doch mal, was du bis jetzt hast.. dann kann man dir auch viel besser helfen

*grüssle*
Jörg
 
alles klar, du hast Recht :)

import javax.swing.*;
import java.awt.*;
import java.util.*;

public class Versuch extends JFrame
{
String[][] DATA = {{"a","1"}, {"b","2"}};
String[][] DATA1 = {{"c","1"}, {"d","2"}};
String[] COLHEADS = {"titel1", "titel2"};
JTable table1 = new JTable();
JTable table2 = new JTable();
Hashtable h = new Hashtable();
JPanel panel2 = new JPanel();

public Versuch()
{
h.put("ersterElement", new JTable(DATA, COLHEADS));
h.put("zweiterElement", new JTable(DATA1, COLHEADS));

JPanel panel1 = new JPanel();
JComboBox combo = new JComboBox();
combo.addItem("ersterElement");
combo.addItem("zweiterElement");
combo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e){
String clickedObject = (String) e.getItem();
JTable table = (JTable)h.get(clickedObject);
table.setVisible(true);
panel2.add(table);}});
panel1.add(combo);

JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(panel1,BorderLayout.NORTH);
CardLayout c1 = new CardLayout();
panel2.setLayout(c1);
panel.add(panel2, BorderLayout.CENTER);
getContentPane().add(panel);

setSize(300,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}


public static void main(String[] args)
{
new Versuch();
}


}



ich habe aber nur den JComboBox und wenn ich auf ein Elemnt clicke taucht nicht die Tabelle auf!
 
Zuletzt bearbeitet:
hi,
zum einen vermischt du die beiden vorgeschlagenen Herangehnsweisen ein wenig..
entweder du setzt die tables manuell sichtbar bzw unsichtbar wie du es in der Itemchanged Methode getan hast, oder du benutzt das CardLayout..
desweiteren hast du vergessen, die Tables auch in das Panel einzufügen.. wo nix ist kann auch nix angezeigt werden ;)

Vergessen wir mal das Cardlayout und machen mit dem manuellen sichtbar machen weiter:
combobox bleibt so wiese ist..
dann erst mal alle Tabellen erstellen und in panel einfügen, dann in hashtable:
Code:
JTable table1 = new JTable(DATA, COLHEADS);
panel.add(table1);
h.put("ersterElement", table1);
....
....
....
panel.add(combobox);

dann hab ich leider einen fehler gemacht.. die methode itemchanged liefert ein event zurück, wenn ein item selektiert oder deselektiert wird... d.h. wir müssen explizit gucken, welches element nun neu selektiert wurde:
Code:
combo.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e){
			       visibleTable();
				}}
		);
		
void visibleTable(){
		String clickedObject = (String)combo.getSelectedItem();
		((JTable)(h.get(clickedObject))).setVisible(true);
		
		
	}

was jetzt noch fehlt ,
1.panel in Frame einfügen
2. wenn eine table sichtbar gemacht wird, die andere wieder unsichtbar zu machen.. da reicht eine if abfrage in der visibleTable() ...

das sollte es gewesen sein..

*grüssle*
MeinerEiner
 
das fonktioniert besser :)
aber mit dieser Geschichte der Visibilität ist es noch nicht klar.

ich habe so geschrieben:
für Table1 : table1.setVisible(true);
für Table2 : table2.setVisible(false);

aber dann, wenn ich auf "zweiterElement " clicke, bleibt die erste Tabelle.
was soll ich schreiben?
und was ist wenn wir mehr als 2 Element in JComboBox haben und genauso mehr Tabellen?
nochmal vielen Danke.
 
soll das heißen, jedesmal wenn ein neues element selektiert wurde, führst du
girl2005 hat gesagt.:
ich habe so geschrieben:
für Table1 : table1.setVisible(true);
für Table2 : table2.setVisible(false);
aus? Dann ist doch klar, das es nicht funktioniert.. Du setzt doch hier jedesmal die erste Tabelle visible...
entweder gehtst du alle elemente in deiner hastable durch und machst eine if abfrage ob der ausgewählte string mit den keys übeinsteimmt.. d.h. diese table wird dann visible gesetzt, oder halt nicht, dann wird die table unsichtbar gesetzt..

alternativ könntest du dir auch die zuletzt gesetzt table merken und diese dann unsichtbar machen..
Code:
//initialisierung
JTable last = null;


void visibleTable(){
		String clickedObject = (String)combo.getSelectedItem();
		((JTable)(h.get(clickedObject))).setVisible(true);
		if(lastTable != null){
                      lastTable.setVisible(false);
                }
                lastTable = ((JTable)(h.get(clickedObject)));
		
	}
 
Zurück