Problem bei Datei zur Verwaltung von Tabs

Status
Nicht offen für weitere Antworten.

pc-world

Bekanntes Mitglied
Ich habe eine Klasse erstellt, die mir helfen soll, ein Fenster mit Tabs besser verwalten zu können.
Hier der Code:

GUI_fenster.java:
Code:
package testPackage;

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

public class GUI_fenster {
	private ArrayList<GUI_tabs> tabListe = new ArrayList<GUI_tabs>();
	private int fensterHoehe = 700;
	private int fensterBreite = 800;
	private static final int fensterHoeheStandard = 700;
	private static final int fensterBreiteStandard = 800;
	private JFrame fenster;
	private GUI_JTabbedPaneWithCloseIcons tabs = new GUI_JTabbedPaneWithCloseIcons();

	public GUI_fenster() {
		fenster = new JFrame();
		fenster.setSize(fensterBreiteStandard, fensterHoeheStandard);
		fenster.setLocationRelativeTo(null);
		fenster.add(tabs);
	}

	public void addTab(int arrayNr, String titel) {
		tabListe.add(arrayNr, new GUI_tabs(titel));
	}

	public void addTab(int arrayNr, String titel, JPanel panel) {
		tabListe.add(arrayNr, new GUI_tabs(titel, panel));
	}

	public GUI_tabs getTab(int arrayNr) {
		return tabListe.get(arrayNr);
	}

	public GUI_fenster(String titel) {
		this();
		setTitel(titel);
	}

	public GUI_fenster(String titel, boolean sichtbar) {
		this();
		setTitel(titel);
		setSichtbar(sichtbar);
	}

	public void setTitel(String titel) {
		fenster.setTitle("Programmname - " + titel);
	}

	public void setSichtbar(boolean sichtbar) {
		fenster.setVisible(sichtbar);
	}

	public void setFensterHoehe(int hoehe) {
		if (hoehe != 0) {
			fenster.setSize(fensterBreite, hoehe);
		} else {
			fenster.setSize(fensterBreite, fensterHoeheStandard);
		}
	}

	public void setFensterBreite(int breite) {
		if (breite != 0) {
			fenster.setSize(breite, fensterHoehe);
		} else {
			fenster.setSize(fensterBreiteStandard, fensterHoehe);
		}
	}

	public void schliessenBeimSchliessen() {
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	class GUI_tabs {

		private JPanel gesamtPanel = new JPanel();
		private JPanel northPanel = new JPanel();
		private JPanel eastPanel = new JPanel();
		private Box southBox;
		private JPanel westPanel = new JPanel();
		private JPanel centerPanel = new JPanel();
		private JLabel ueberschriftLabel = new JLabel();

		private GUI_tabs() {
		}

		public GUI_tabs(String titel, JPanel panel) {
			tabs.add(titel, panel);
		}

		public GUI_tabs(String titel) {
			tabs.add(titel, new JPanel());
		}

		public void setEastPanel(JPanel panel) {
			JPanel panel2 = new JPanel();
			panel2.setLayout(new GridBagLayout());
			panel2.add(panel);
			eastPanel = new JPanel();
			eastPanel.setLayout(new BorderLayout());
			eastPanel.add(BorderLayout.EAST, panel);
			gesamtPanel.add(panel);
			gesamtPanel.validate();
		}

		public void setCenterPanel(JPanel panel) {
			JPanel panel2 = new JPanel();
			panel2.setLayout(new GridBagLayout());
			panel2.add(panel);
			centerPanel = new JPanel();
			centerPanel.setLayout(new BorderLayout());
			centerPanel.add(panel2);
			gesamtPanel.add(BorderLayout.CENTER, panel);
			gesamtPanel.validate();
		}

		public void setUeberschrift(String ueberschrift) {
			northPanel = new JPanel();
			ueberschriftLabel = new JLabel(ueberschrift);
			Font fontUeberschrift = new Font("Comic Sans MS", Font.BOLD, 30);
			ueberschriftLabel.setFont(fontUeberschrift);
			northPanel.add(ueberschriftLabel);
			fenster.add(BorderLayout.NORTH, northPanel);
		}

	}

	public static void main(String[] args) {
		GUI_fenster fenster = new GUI_fenster();
		fenster.schliessenBeimSchliessen();
		fenster.setSichtbar(true);

		JPanel panel = new JPanel();
		fenster.addTab(0, "Test", panel);
		fenster.getTab(0).setCenterPanel(panel); // Bug, bei Verwendung
												// dieser Funktion wird der
												// Tab nicht angezeigt
		fenster.addTab(1, "Test2");
		JPanel x = new JPanel();
		x.add(new JButton("hi"));
		fenster.getTab(1).setCenterPanel(x);
	}

}

Das ganze habe ich in der main()-Methode getestet, funktioniert auch soweit - bis die Methode setCenterPanel() aufgerufen wird, dann wird der entsprechende Tab nicht mehr angezeigt.

PS: Bitte nicht rummeckern, der Code sei krank - das weiß ich selber :). Eher Vorschläge bringen, wie ich ihn aufbessern kann!
 

pc-world

Bekanntes Mitglied
Bin jetzt schonmal weitergekommen.

Wenn ich in der Zeile
Code:
fenster.addTab(0, "Test", panel);
den dritten Parameter weglasse, geht es.

Die Methode addTab() mit zwei Parametern verwendet den GUI_tabs-Konstruktor mit einem Parameter (bei der addTab()-Methode mit drei Parametern wird der GUI_tabs-Konstruktor mit zwei Parametern verwendet).

Der erste GUI_tabs-Konstruktor:
Code:
public GUI_tabs(String titel) {
	tabs.add(titel, new JPanel());
}

Der zweite:
Code:
public GUI_tabs(String titel, JPanel panel) { // [1]
	tabs.add(titel, panel);
}

Also gibt es irgendein Problem mit dem übergebenen Parameter panel (siehe [1]), welches ich allerdings nicht finden kann.

----
PS: Hoffentlich war es euch nicht zu viel Parameterei und Konstruktorei! :D
 

pc-world

Bekanntes Mitglied
Ich hab den Bug jetzt gefunden und den einen Konstruktor von der Klasse GUI_tabs wiefolgt umgeändert:
Code:
public GUI_tabs(String titel, JPanel panel) {
	tabs.add(titel, new JPanel());
	setCenterPanel(panel);
}
Jetzt wird der entsprechende Tab wieder angezeigt.

Aber jetzt habe ich das nächste Problem - ich habe auf den Tab jetzt nicht ein leeres JPanel setzen lassen - sondern eins mit einem JLabel. Aber es wird nur ein leeres Panel angezeigt! :bahnhof:

Mein Code sieht jetzt so aus (diesmal ist mein Code auf's nötigste beschränkt):

Code:
package testPackage;

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

public class GUI_fenster {
	private ArrayList<GUI_tabs> tabListe = new ArrayList<GUI_tabs>();
	private int fensterHoehe = 700;
	private int fensterBreite = 800;
	private JFrame fenster;
	private GUI_JTabbedPaneWithCloseIcons tabs = new GUI_JTabbedPaneWithCloseIcons(); // ist eine 
                     //JTabbedPane mit Schließen-Buttons

	public GUI_fenster() {
		fenster = new JFrame();
		fenster.setSize(fensterBreiteStandard, fensterHoeheStandard);
		fenster.setLocationRelativeTo(null);
		fenster.add(tabs);
	}

	public void addTab(int arrayNr, String titel) {
		tabListe.add(arrayNr, new GUI_tabs(titel));
	}

	public void addTab(int arrayNr, String titel, JPanel panel) {
		tabListe.add(arrayNr, new GUI_tabs(titel, panel));
	}

	public GUI_tabs getTab(int arrayNr) {
		return tabListe.get(arrayNr);
	}

	public GUI_fenster(String titel) {
		this();
		setTitel(titel);
	}

	public GUI_fenster(String titel, boolean sichtbar) {
		this();
		setTitel(titel);
		setSichtbar(sichtbar);
	}


	public void setSichtbar(boolean sichtbar) {
		fenster.setVisible(sichtbar);
	}

	public void schliessenBeimSchliessen() {
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	class GUI_tabs {

		private JPanel gesamtPanel = new JPanel();
		private JPanel northPanel = new JPanel();
		private JPanel eastPanel = new JPanel();
		private Box southBox;
		private JPanel westPanel = new JPanel();
		private JPanel centerPanel = new JPanel();
		private JLabel ueberschriftLabel = new JLabel();

		private GUI_tabs() {
		}

		public GUI_tabs(String titel, JPanel panel) {
			tabs.add(titel, new JPanel());
			setCenterPanel(panel);
		}

		public GUI_tabs(String titel) {
			tabs.add(titel, new JPanel());
		}

		public void setCenterPanel(JPanel panel) {
			JPanel panel2 = new JPanel();
			panel2.setLayout(new GridBagLayout());
			panel2.add(panel);
			centerPanel = new JPanel();
			centerPanel.add(panel2);
			gesamtPanel.setLayout(new BorderLayout());
			gesamtPanel.add(BorderLayout.CENTER, panel);
			gesamtPanel.validate();
		}

	}

	public static void main(String[] args) {
		GUI_fenster fenster = new GUI_fenster();
		fenster.schliessenBeimSchliessen();
		fenster.setSichtbar(true);

		JPanel panel = new JPanel();
		JLabel label = new JLabel("abc");
		panel.add(label);
		fenster.addTab(0, "Test", panel);
		
		panel.add(new JButton("a"));
		fenster.getTab(0).setCenterPanel(panel);
		fenster.addTab(1, "Test2");

		JPanel x = new JPanel();
		x.add(new JButton("hi"));
		fenster.getTab(1).setCenterPanel(x);
	}

}
 

pc-world

Bekanntes Mitglied
Hab das Problem gelöst.

Den einen GUI_tabs-Konstruktor musste ich in folgendes ändern:
Code:
		public GUI_tabs(String titel, JPanel panel) {
			setCenterPanel(panel);
         tabs.add(titel, gesamtPanel); 
		}
 

pc-world

Bekanntes Mitglied
Ich habe jetzt doch noch ein Problem.
Die Methode setCenterPanel() (oder wo auch immer das Problem steckt) hat einen Haken.

Das Panel sieht jetzt so aus:
JavaTabPanel-Prob-jetzt.png


Aber ich will, dass es so aussieht:
JavaTabPanel-Prob-so.PNG


Mein Code (so klein wie möglich gehalten):

Code:
package testPackage;

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

public class GUI_fenster {
	private ArrayList<GUI_tabs> tabListe = new ArrayList<GUI_tabs>();
	private int fensterHoehe = 700;
	private int fensterBreite = 800;
	private static final int fensterHoeheStandard = 700;
	private static final int fensterBreiteStandard = 800;
	private JFrame fenster;
	private GUI_JTabbedPaneWithCloseIcons tabs = new GUI_JTabbedPaneWithCloseIcons();

	public GUI_fenster() {
		fenster = new JFrame();
		fenster.setSize(fensterBreiteStandard, fensterHoeheStandard);
		fenster.setLocationRelativeTo(null);
		fenster.add(tabs);
	}

	public void addTab(int arrayNr, String titel, JPanel panel) {
		tabListe.add(arrayNr, new GUI_tabs(titel, panel));
	}

	public GUI_tabs getTab(int arrayNr) {
		return tabListe.get(arrayNr);
	}

	public void setSichtbar(boolean sichtbar) {
		fenster.setVisible(sichtbar);
	}

	public void schliessenBeimSchliessen() {
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	class GUI_tabs {

		private JPanel gesamtPanel = new JPanel();
		private JPanel northPanel = new JPanel();
		private JPanel eastPanel = new JPanel();
		private JPanel centerPanel = new JPanel();

		private GUI_tabs() {
			gesamtPanel.setLayout(new BorderLayout()); 
		}

		public GUI_tabs(String titel, JPanel panel) {
			this();
			setCenterPanel(panel);
			tabs.add(titel, gesamtPanel);
		}

		public void setNorthPanel(JPanel panel) {
			JPanel panel2 = new JPanel();
			panel2.setLayout(new GridBagLayout());
			panel2.add(panel);
			northPanel = new JPanel();
			northPanel.add(panel2);
			gesamtPanel.add(BorderLayout.NORTH, panel);
			gesamtPanel.validate();
		}
		
		public void setEastPanel(JPanel panel) {
			JPanel panel2 = new JPanel();
			panel2.setLayout(new GridBagLayout());
			panel2.add(panel);
			eastPanel = new JPanel();
			eastPanel.add(panel2);
			gesamtPanel.add(BorderLayout.EAST, panel);
			gesamtPanel.validate();
		}

		public void setCenterPanel(JPanel panel) {
			JPanel panel2 = new JPanel();
			panel2.setLayout(new GridBagLayout());
			panel2.add(panel);
			centerPanel = new JPanel();
			centerPanel.add(panel2);
			gesamtPanel.setLayout(new BorderLayout());
			gesamtPanel.add(BorderLayout.CENTER, panel);
			gesamtPanel.validate();
		}

	}

	public static void main(String[] args) throws InterruptedException {
		GUI_fenster fenster = new GUI_fenster();
		fenster.schliessenBeimSchliessen();

		JPanel panel2 = new JPanel();
		panel2.add(new JLabel("Tab2"));
		fenster.addTab(1, "Test2", panel2);
		fenster.setSichtbar(true);

		Thread.sleep(1000);
		panel2.add(new JButton("Tab2"));
		fenster.getTab(1).setCenterPanel(panel2);
		JPanel panel3 = new JPanel();
		panel3.add(new JButton("Osten"));
		fenster.getTab(1).setEastPanel(panel3);
		JPanel panel4 = new JPanel();
		panel4.add(new JButton("Norden"));
		fenster.getTab(1).setNorthPanel(panel4);
	}

}

Sieht jemand den Fehler?
 

pc-world

Bekanntes Mitglied
Ich hab den Fehler behoben.

Die Änderung:
Code:
		public void setCenterPanel(JPanel panel) {
			JPanel panel2 = new JPanel();
			panel2.setLayout(new GridBagLayout());
			panel2.add(panel);
			gesamtPanel.remove(centerPanel);
			centerPanel = panel2;
			gesamtPanel.setLayout(new BorderLayout());
			gesamtPanel.add(BorderLayout.CENTER, centerPanel);
			gesamtPanel.validate();
		}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
W TrayIcon mit jdic (Problem bei .jar Datei) AWT, Swing, JavaFX & SWT 3
R Swing XML Datei in JTree, Problem mit Daten einlesen AWT, Swing, JavaFX & SWT 34
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
T LayoutManager LookAndFeel-Problem AWT, Swing, JavaFX & SWT 4
F Problem mit Implementierung von Kollisionsabfrage AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
B JavaFX Problem bei Kamera / Group, gesamte Scene bewegt sich mit AWT, Swing, JavaFX & SWT 0
L Swing Vier Gewinnt Problem AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben