Codeverdoppelung vermeiden

Status
Nicht offen für weitere Antworten.

pc-world

Bekanntes Mitglied
Hallo.

Ich habe eine Methode, die folgendermaßen aussieht:
Code:
	public void setEastPanel(JPanel panel) {
		if (tabs.indexOfTabComponent(eastPanel) != -1) {
			tabs.remove(eastPanel);
		}
		fenster.remove(eastPanel);
		panel.setLayout(new GridBagLayout());
		eastPanel = new JPanel();
		eastPanel.setLayout(new BorderLayout());
		eastPanel.add(BorderLayout.EAST, panel);
		tabs.add("Titel", eastPanel);
		fenster.validate();
	}

Mein Problem ist, dass ich die gleiche Methode noch mit setWestPanel und setCenterPanel und Andere habe.
Doch bei allen ist EAST, WEST, ... und tabs.remove(eastPanel);, tabs.remove(westPanel); usw. anders.

Wie kann ich hier Codeverdoppelung vermeiden (die Wartung regt mich langsam auf...:!🙂?
 
Schreib doch einfach private (nur in der Klasse sichtbare) Submethoden, mit denen du das Problem in Teilprobleme aufteilst und abarbeiten kannst.
 
Wie KONKRET man das machen kann ... ist schwer zu sagen....

Mit Sicherheit ist bei
Code:
...
         tabs.remove(eastPanel);
      }
      fenster.remove(eastPanel);
...
aber EIN aufruf überflüssig, weil ein Panel nicht in zwei anderen Panels liegen kann.


Irgendwie sieht das ziemlich ... krampfig aus :? Poste vielleicht mal die relevanten Methoden, und beschreib' genauer, WAS dort gemacht werden soll - da gibt's bestimmt eine einfachere Lösung dafür...
 
L-ectron-X hat gesagt.:
Schreib doch einfach private (nur in der Klasse sichtbare) Submethoden, mit denen du das Problem in Teilprobleme aufteilst und abarbeiten kannst.
Das ist wahrscheinlich die einfachste Lösung.

Trotzdem hier mein gesamter Code:
Code:
package testPackage;

import java.awt.*;

import javax.swing.*;

public class GUI_neuesFenster {
	private int fensterHoehe = 700;
	private int fensterBreite = 800;
	private static final int fensterHoeheStandard = 700;
	private static final int fensterBreiteStandard = 800;
	private JFrame fenster;
	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 JTabbedPaneWithCloseIcons tabs = new JTabbedPaneWithCloseIcons(); // Erweitert JTabbedPane, noch fügt noch einen Button zum Schließen hinzu.

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

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

	public GUI_neuesFenster(String titel, String ueberschrift) {
		this();
		setTitel(titel);
		setUeberschrift(ueberschrift);
	}

	public GUI_neuesFenster(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 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 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 setEastPanel(JPanel panel) {
		if (tabs.indexOfTabComponent(eastPanel) != -1) {
			tabs.remove(eastPanel);
		}
		fenster.remove(eastPanel);
		JPanel panel2 = new JPanel();
		panel2.setLayout(new GridBagLayout());
		panel2.add(panel);
		eastPanel = new JPanel();
		eastPanel.setLayout(new BorderLayout());
		eastPanel.add(BorderLayout.EAST, panel);
		tabs.add("Titel", eastPanel);
		fenster.validate();
	}

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

}

Diese Klasse soll mir dabei helfen, ein Fenster mit Tabs zu erstellen (das mit den Tabs ist noch nicht ganz fertig).
Und jetzt brauche ich nicht nur setEastPanel(), sondern auch setCenterPanel(), setWestPanel() usw. (die hab' ich hier erst gar nicht reingeschrieben, die sind sowieso nicht aktuell 🙂).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben