Swing JTabbedPane mit JButton einen anderen Tab anzeigen

piplack

Mitglied
Hallo,

ich möchte bei Klick auf einen bestimmten JButton, dass ein anderer Tab angezeigt wird.

Der JButton ist mit einem ActionListener hinterlegt.
Ich habe es bereits mit den methoden

getSelectedIndex();
setSelectedIndex(indx);

versucht, aber er bleibt immer noch bei der alten Tab.
Wie kann ich im ActionListener die richtige Tab ansteuern?
 

eRaaaa

Top Contributor
setSelectedIndex(indx) sollte funktionieren laut How to Use Tabbed Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
To switch to a specific tab programmatically, use the setSelectedIndex or the setSelectedComponent methods.

kannst du ein kurzes ausführbares Beispielprogramm posten?
Ala
Java:
	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		final JTabbedPane tabbed = new JTabbedPane();
		JButton btn = new JButton("button1");
		btn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tabbed.setSelectedIndex(1); //switch to tab2
			}
		});
		panel.add(btn);
		JPanel panel2 = new JPanel();
		panel2.add(new JButton("button2"));
		tabbed.addTab("tab1", panel);
		tabbed.addTab("tab2",panel2);
		frame.add(tabbed);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
 

piplack

Mitglied
Java:
public class Startview1 extends JFrame implements Observer, MouseListener, ChangeListener, WindowListener{

	Startmodel startmodel;
	
	private static TextField spieler1;				//tab neuesSpiel
	private static TextField spieler2;		
	private static JComboBox breite = new JComboBox();
	private static JComboBox hoehe = new JComboBox();
	private String[] anzahlKaestchen = {"4","5","6","7", "8", "9", "10"}; //Fuellung fuer die JComboBox
	private JButton spielStarten;
	private JButton abbrechen;
	
...
	

	static JTabbedPane tabs;
	
	public Startview1(Startmodel sm){
		
		startmodel = sm;
		
		Container ct1 = this.getContentPane();
		setTitle("Kaesekaestchen");	
		
	/*
	 * Register erstellen als neue Panels
	 */
		JPanel neuesSpiel = new JPanel();
		JPanel spielLaden = new JPanel();
		JPanel spielfeld = new JPanel();
		JPanel anLeitung = new JPanel();
		
	/*
	 * Pane erstellen, die ihre Registerkarte oben ausgerichtet hat
	 */
		JTabbedPane tabs = new JTabbedPane();
		
	/*
	 * Panels (Register) zur Pane hinzufügen
	 */
		tabs.addTab(null, neuesSpiel);
		tabs.setTabComponentAt(0, new JLabel("Neues Spiel"));
		tabs.addTab(null, spielLaden);
		tabs.setTabComponentAt(1, new JLabel("Spiel laden"));
		tabs.addTab(null, spielfeld);
		tabs.setTabComponentAt(2, new JLabel("Spielfeld"));
		tabs.addTab(null, anLeitung);
		tabs.setTabComponentAt(3, new JLabel("Anleitung"));
		
	/*
	 * Register "neues Spiel" 
	 */
		neuesSpiel.setLayout(new GridLayout(5, 3, 10, 10));
		
		JLabel jl1;
		neuesSpiel.add(jl1 = new JLabel("Spieler 1: "));
		neuesSpiel.add(spieler1 = new TextField("Name?"));
		spieler1.setName("Spieler1");
		spieler1.addMouseListener(this);
		spieler1.addActionListener(new Startcontroller(this));
		
		JLabel jl2;
		neuesSpiel.add(jl2 = new JLabel(" Farbe:  rot / Zeichen: X"));
		jl2.setBorder(new LineBorder (Color.red, 2));
		
		neuesSpiel.add(new JLabel("Spieler 2: "));
		neuesSpiel.add(spieler2 = new TextField("Name?"));
		spieler2.setName("Spieler2");
		spieler2.addMouseListener(this);
		spieler2.addActionListener(new Startcontroller(this));
		
		JLabel jl3;
		neuesSpiel.add(jl3 = new JLabel(" Farbe:  blau / Zeichen: O"));
		jl3.setBorder(new LineBorder (Color.blue, 2));
		
		neuesSpiel.add(new JLabel("Spielfeldgröße: "));
		breite.setName("breite");
		breite = new JComboBox(anzahlKaestchen);
		neuesSpiel.add(breite);
		breite.addActionListener(new Startcontroller (this));
		
		neuesSpiel.add(new JLabel("= Breite"));
		neuesSpiel.add(new JLabel("" ));
		
		hoehe = new JComboBox(anzahlKaestchen);
		hoehe.setName("hoehe");
		hoehe.setEnabled(false);
		neuesSpiel.add(hoehe);
		
		neuesSpiel.add(new JLabel("= Hoehe"));
		neuesSpiel.add(new JLabel(""));
		
		neuesSpiel.add(spielStarten = new JButton("Spiel starten"));
		spielStarten.setName("spielStart");
		
		neuesSpiel.add(abbrechen = new JButton("Abbrechen"));
		abbrechen.setName("abbrechen");
	
		spielStarten.addActionListener(new Startcontroller (this));
		abbrechen.addActionListener(new Startcontroller (this));
Startcontroller-Klasse:
Java:
public class Startcontroller implements ActionListener, ChangeListener{

	private Startview1 startview1;
	private Startmodel startmodel;


	public Startcontroller(Startview1 startview1) {
	this.startview1 = startview1;	
	}
	
	public Startmodel getStartmodel() {
		return startmodel;
	}

	public void setStartmodel(Startmodel startmodel) {
		this.startmodel = startmodel;
	}

	public Startview1 getStartview1() {
		return startview1;
	}

	public void setStartview1(Startview1 startview1) {
		this.startview1 = startview1;
	}

	public void actionPerformed(ActionEvent e) {
		
		if (e.getSource() instanceof JButton) {
		
			if (((JButton) e.getSource()).getName().equals("spielStart")) {

...
				
				if (!Startview1.getSpieler1().getText().isEmpty()) {
					Startview1.getSpielerA1().setText(Startview1.getSpieler1().getText());
					Startview1.getSpielerB1().setText(Startview1.getSpieler2().getText());
					Startview1.getSpielerA2().setText(Startview1.getSpieler1().getText());
					Startview1.getSpielerB2().setText(Startview1.getSpieler2().getText());
				
	

					int x = 2;					
					Startview1.getTabs().getSelectedIndex();
					Startview1.getTabs().setSelectedIndex(x);

					System.out.println("Neues Spiel wird gestartet.");			
					
					}			
				
			}
			
			else if (((JButton) e.getSource()).getName() == "wahlSpiel") {
				System.out.println("Ausgewaehltes Spiel wird gestartet.");}
			
			else if (((JButton) e.getSource()).getName() == "abbrechen") {
				System.out.println("Spiel wird abgebrochen");	
				JDialog jd1 = new JDialog();
				JOptionPane.showMessageDialog(jd1, 
						"Die Anwendung wird jetzt geschlossen! \n" +
						"Bitte starten sie ggf. das Spiel erneut.",
				"Abbrechen", JOptionPane.WARNING_MESSAGE);
				System.exit(0); 	
			}
					
			else {
				System.out.println("Das war nichts");
			}
	}	
[/JAVA)]
Habe das wesentliche übertragen. Er hängt sich immer wieder nach dem int x auf.

Bin Anfängerin, bitte nicht nur irgendwelche Methoden hinwerfen. Davon habe ich die letzten Tage viel zu viele erfolglos versucht. Wenn es geht, bitte konkrete Vorschläge machen. Danke
 

jmarc

Mitglied
Hi,

du musst in deiner actionPerformed Methode vom ActionListener auf dem JButton einfach folgendes machen.

tabs.setSelectedIndex(x);
für x muss die Zahl stehen an welcher Stelle der Tab ist.
0 der erste, 1 der zweite, 2 der dritte etc....
 

piplack

Mitglied
Habe ich ja versucht,

aber er spuckt mir immer einen Fehler aus:


Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Startview.Startcontroller.actionPerformed(Startcontroller.java:108)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

in 107 /108 steht
int x = 2;
Startview1.getTabs().setSelectedIndex(x);

Weitere Tipps?
 

Enigma228

Bekanntes Mitglied
jetzt kommen so die üblichen vorgehensweisen..

Hast du wirklich 3 Tabpanes und sind diese auch schon erstellt und liegen nicht nur als Referenz vor?
 

piplack

Mitglied
Ja, ich habe Tab-Panes, es sind sogar 4 an der Zahl.

siehe hierzu den Codeauschnitt

/*
* Pane erstellen, die ihre Registerkarte oben ausgerichtet hat
*/
JTabbedPane tabs = new JTabbedPane();

/*
* Panels (Register) zur Pane hinzufügen
*/
tabs.addTab(null, neuesSpiel);
tabs.setTabComponentAt(0, new JLabel("Neues Spiel"));
tabs.addTab(null, spielLaden);
tabs.setTabComponentAt(1, new JLabel("Spiel laden"));
tabs.addTab(null, spielfeld);
tabs.setTabComponentAt(2, new JLabel("Spielfeld"));
tabs.addTab(null, anLeitung);
tabs.setTabComponentAt(3, new JLabel("Anleitung"));
 

Michael...

Top Contributor
Startview1.getTabs().setSelectedIndex(x);
Steht im Code tatsächlich Startview1 oder startview1? Ersteres ist der Name der Klasse (und wäre falsch) zweiteres ist der Name einer Referenz auf ein Objekt vom Typ StartView1.
Was liefert denn
Code:
startview1.getTabs()
? Eventuell gibt ja bereits die Methode null zurück.
 

jmarc

Mitglied
öhm du legst oben deine tabpane als static an und unten sagst du nochmal TabbedPane = new Tab...
im actionlistener greift er aber auf die static pane zu. du musst unten lediglich schreiben tabs = new TabbedPane...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
BabySuna darstellungsprobleme mit JTabbedPane und GridBagLayout AWT, Swing, JavaFX & SWT 8
I JTabbedPane mit DnD, [x]-Schaltfläche, [+]-Schaltfläche usw. AWT, Swing, JavaFX & SWT 1
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
B JTabbedPane Tabs anordnen AWT, Swing, JavaFX & SWT 2
D JTabbedPane GUI Experimente AWT, Swing, JavaFX & SWT 4
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
L JTabbedPane mit for Schleife aufbauen AWT, Swing, JavaFX & SWT 4
J JTabbedPane Vollbild wenn Tabwechsel AWT, Swing, JavaFX & SWT 1
B StateChangeListener auf JTabbedPane AWT, Swing, JavaFX & SWT 5
F jTabbedPane Tabwechsel deaktivieren AWT, Swing, JavaFX & SWT 2
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
M JTabbedPane verändern mit Nimbus Look and Feel AWT, Swing, JavaFX & SWT 1
F JTabbedPane bestimmten Tab ansprechen AWT, Swing, JavaFX & SWT 13
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
BRoll JTabbedPane setTitleAt OutOfBoundsExc AWT, Swing, JavaFX & SWT 4
K JTabbedPane Tab Markierung / Selektion AWT, Swing, JavaFX & SWT 4
B Custom JTabbedPane-Tab-Design AWT, Swing, JavaFX & SWT 2
L JTabbedPane Closebutton integrieren AWT, Swing, JavaFX & SWT 6
J JTabbedPane Grafik unterhalb der Tabs AWT, Swing, JavaFX & SWT 3
H Swing JTabbedPane: Zusätzliche Buttons neben den Tabs AWT, Swing, JavaFX & SWT 7
V JTabbedPane Eingefügte Labels verschoben AWT, Swing, JavaFX & SWT 2
M Swing JTabbedPane: Tab-Elemente anpassen AWT, Swing, JavaFX & SWT 3
S Swing JTabbedPane: Nur nach ButtonClick und nicht nach Click auf Tab ins nächste Tab wechseln AWT, Swing, JavaFX & SWT 2
P JTabbedPane per Menuitem erstellen AWT, Swing, JavaFX & SWT 20
K Swing JTabbedPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 19
B Swing JTabbedPane in JApplet -> Reiter bei Aktualisation mehrmals zu sehen AWT, Swing, JavaFX & SWT 3
M JTabbedPane -> setSelectedIndex funzt nicht AWT, Swing, JavaFX & SWT 3
D Bestimmtes JPanel innerhalb eines JTabbedPane ansprechen AWT, Swing, JavaFX & SWT 2
M jtabbedpane aktivieren/deaktivieren AWT, Swing, JavaFX & SWT 13
J Swing Letzten Tab einer JTabbedPane ermitteln AWT, Swing, JavaFX & SWT 6
T JTabbedPane - neuen Tab zwischen zwei anderen Tabs hinzufügen AWT, Swing, JavaFX & SWT 2
B Hilfe zu JTable und JTabbedPane AWT, Swing, JavaFX & SWT 18
hdi LookAndFeel Nimbus BUG mit JTabbedPane?! AWT, Swing, JavaFX & SWT 5
hdi Swing Problem mit JTabbedPane AWT, Swing, JavaFX & SWT 2
A LookAndFeel Rollover Effekt bei JTabbedPane deaktivieren (Nimbus) AWT, Swing, JavaFX & SWT 8
T Inhalt von einem Tab an JTabbedPane größe ausrichten? AWT, Swing, JavaFX & SWT 2
S JTabbedPane Problem AWT, Swing, JavaFX & SWT 3
S JTabbedPane AWT, Swing, JavaFX & SWT 4
D JTabbedPane mit Eventlistener versehen? AWT, Swing, JavaFX & SWT 9
M Swing JTabbedPane Panels deaktivieren AWT, Swing, JavaFX & SWT 2
K JTabbedPane setName() für jedes Tab AWT, Swing, JavaFX & SWT 2
G JTabbedPane - Länge der Reiter beeinflussen? AWT, Swing, JavaFX & SWT 9
G Swing JTabbedPane Was für ein Border wird da um die Tabs gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Komponentengröße in JTabbedPane AWT, Swing, JavaFX & SWT 7
M Ein Tab eine JTabbedPane durch Button Druck öffen AWT, Swing, JavaFX & SWT 2
Y LookAndFeel JTabbedPane: Tab-Farbe mit Nimbus setzen AWT, Swing, JavaFX & SWT 3
M CloseButton bei JTabbedPane AWT, Swing, JavaFX & SWT 4
D JTabbedPane zentrieren AWT, Swing, JavaFX & SWT 2
S Swing JTabbedPane: Inhalt soll oben links anfangen AWT, Swing, JavaFX & SWT 6
Mike90 JTabbedPane Größe anpassen AWT, Swing, JavaFX & SWT 17
F JTabbedPane Reiter breite AWT, Swing, JavaFX & SWT 4
B JTabbedPane mit Enumeration dynamisch füllen AWT, Swing, JavaFX & SWT 5
D Swing Tab in JTabbedPane AWT, Swing, JavaFX & SWT 5
A JFrame > JTabbedPane > JPanel > addKeyListener AWT, Swing, JavaFX & SWT 18
D JTabbedPane - Farbe ändern im Bereich hinter den Reitern AWT, Swing, JavaFX & SWT 2
M JTabbedPane - Tab auslesen AWT, Swing, JavaFX & SWT 2
H Swing Problem mit JTabbedPane AWT, Swing, JavaFX & SWT 9
D jtabbedpane Event VOR tab-Wechsel AWT, Swing, JavaFX & SWT 3
S Border von JTabbedpane-Tab? AWT, Swing, JavaFX & SWT 3
M JTabbedPane Docable? AWT, Swing, JavaFX & SWT 3
L Swing JTabbedPane - Index vom Tab AWT, Swing, JavaFX & SWT 3
D Swing JTabbedPane, TabComponent & Popup AWT, Swing, JavaFX & SWT 4
F Borders von JTabbedPane und JScrollPane AWT, Swing, JavaFX & SWT 5
W JTabbedPane Größe anpassen AWT, Swing, JavaFX & SWT 4
G Swing JTabbedPane vergrößern AWT, Swing, JavaFX & SWT 2
H Swing Register (jTabbedPane) dynamisch hinzufügen? AWT, Swing, JavaFX & SWT 7
D Tabs von JTabbedPane stylen AWT, Swing, JavaFX & SWT 6
U JTabbedPane: Layout-Probleme bei addTab zur Laufzeit AWT, Swing, JavaFX & SWT 2
1 JTabbedPane Tab ausdehnen AWT, Swing, JavaFX & SWT 3
F Swing JTabbedPane: Zur Laufzeit die Tabreihenfolge ändern AWT, Swing, JavaFX & SWT 2
M Elemente in JTabbedPane platzieren AWT, Swing, JavaFX & SWT 7
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
K LookAndFeel JTabbedPane mit Icon und CloseButton AWT, Swing, JavaFX & SWT 2
D Swing Probleme bei mit JTabbedPane.getChildren() AWT, Swing, JavaFX & SWT 4
I Swing Randnutzung bei JTabbedPane.LEFT AWT, Swing, JavaFX & SWT 2
ABstraCT JTabbedPane - click wird nicht immer ausgeführt ! AWT, Swing, JavaFX & SWT 10
P JTabbedPane und fill? AWT, Swing, JavaFX & SWT 2
D Swing mehrere JTable in separaten Tabs einer JTabbedPane AWT, Swing, JavaFX & SWT 2
G JTabbedPane transparent AWT, Swing, JavaFX & SWT 2
S Swing JTabbedPane: Resize des JFrame bei Tab wechsel AWT, Swing, JavaFX & SWT 8
thE_29 Swing JTabbedPane Focus von Komponenten außerhalb AWT, Swing, JavaFX & SWT 10
S Scrollbar in einem JTabbedPane AWT, Swing, JavaFX & SWT 4
A Schriftfarbe von jTabbedPane und Button Ändern AWT, Swing, JavaFX & SWT 7
R JTabbedPane Selektion verfolgen? AWT, Swing, JavaFX & SWT 2
byte JTabbedPane - Insets entfernen AWT, Swing, JavaFX & SWT 7
S JTabbedPane child setBounds AWT, Swing, JavaFX & SWT 4
J jTabbedPane mit jPanel füllen AWT, Swing, JavaFX & SWT 14
A JTable im JTabbedPane -> Überschriften werden nicht angez AWT, Swing, JavaFX & SWT 2
V Extended JTabbedPane AWT, Swing, JavaFX & SWT 7
V JTabbedPane - keine "Focus"-Box auf selektiertem T AWT, Swing, JavaFX & SWT 2
G JTabbedPane wird groesser wenn man anderen Tab auswaehlt. AWT, Swing, JavaFX & SWT 2
A JTabbedPane Tabwechsel rausfinden AWT, Swing, JavaFX & SWT 2
O JTabbedPane - Selected Color? AWT, Swing, JavaFX & SWT 1
T Wie aktualisiere ich die Contents einer JTabbedPane? AWT, Swing, JavaFX & SWT 3
G JTabbedPane zentiert alles AWT, Swing, JavaFX & SWT 3
P Schließen-Button bei JTabbedPane? AWT, Swing, JavaFX & SWT 2
D Probleme mit JTabbedPane AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben