Fenster aufteilen, aber mit welchem LayoutManager?

marian04

Aktives Mitglied
Hallo Leute,

da mir mein JavaBuch leider keine Antwort liefert, muss ich euch mal wieder eine Frage stellen.
Und zwar möchte ich mein JFrame sozusagen "aufteilen". Und zwar auf eine ganz bestimme Art und Weise : 1/3 zu 2/3
Okay ist klar, dass jetzt erstmal keiner versteht was ich meine, deswegen zeige ich es gleich anhand eines Bildes :

attachment.php




Das zweite JPanel soll des öfteren ausgetauscht und mit neuen Textfeldern bestückt werden usw.

Ich hoffe mir kann jemand helfen.

Liebe Grüße
 

Anhänge

  • beispielq.png
    beispielq.png
    16,4 KB · Aufrufe: 128
Zuletzt bearbeitet von einem Moderator:
C

Camino

Gast
Hallo,

da gibt es bestimmt mehrere Möglichkeiten. Ich würde da verschiedene LayoutManager schachteln. Im Frame würde ich mit dem BorderLayout arbeite und Panel1 in den WEST-Bereich und Panel2 in den CENTER-Bereich einfügen. Für Panel2 würde ich CardLayout nehmen, dann kannst du mehrere Panels hinzufügen und zwischen denen hin- und herschalten.
 
C

Camino

Gast
Versuch mal die Grösse des 1. Panels mit setPreferredSize und setMinimumSize festzulegen (am besten beides). Dann müsste eigentlich das Panel die gewünschte Grösse bekommen und auch behalten.
 

r.w.

Bekanntes Mitglied
Hallo Marian04,

alternativ geht das auch mit einem BorderLayout und einem JSplitPane im CENTER-Bereich.
Beim JSplitPane kann man die Position des Dividers festlegen und gegen Verschieben per Maus schützen.

Hier ein kurzes Beispiel:


Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
//import java.awt.Graphics;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;


public class SplitDemo extends JFrame{
    
    double dividerLocation = (1.0/3.0);
    
   
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {             
                new SplitDemo();
            }
        });        
    }
    

    SplitDemo() {
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("SplitDemo");
        
        pBack = new JPanel();
        pBack.setLayout(new BorderLayout());
        
        pMenu = new JPanel();
        pMenu.setBackground(Color.DARK_GRAY);
        pMenu.setPreferredSize(new Dimension(-1, 80));
        
        pLeft = new JPanel();
        pLeft.setBackground(Color.GRAY);
        
        pRight = new JPanel();
        pRight.setBackground(Color.LIGHT_GRAY);
        
        
        pSplit = new JSplitPane();
        pSplit.setEnabled(false);
        
        
        pSplit.add(pLeft, JSplitPane.LEFT);
        pSplit.add(pRight, JSplitPane.RIGHT);
        
        
        pBack.add(pMenu, BorderLayout.NORTH);
        pBack.add(pSplit, BorderLayout.CENTER);
        
        add(pBack);

        setSize(800,600);
        setVisible(true);

        pSplit.setDividerLocation(dividerLocation);
        pSplit.setDividerSize(1);
        
    }
    

//    @Override
//    public void paint(Graphics g) {
//        pSplit.setDividerLocation(dividerLocation);
//        super.paint(g);
//    }

    
    JPanel pBack;
    JPanel pMenu;
    JSplitPane pSplit;
    JPanel pLeft;
    JPanel pRight;

}


Wenn die Drittel-Aufteilung auch erhalten bleiben soll, wenn der JFrame in der
Größe verändert wird, füge einfach die auskommentierten Zeilen wieder ein.

Das mit der Paint-Methode ist zwar nicht die sauberste Lösung, aber sicher
die mit dem geringeren Aufwand. Was man noch tun könnte, wäre innerhalb
der paint-Methode zu prüfen, ob sich die Größe des JFrames tatsächlich geändert
hat. Eine weitere Möglichkeit wäre ein Component-Listener (der eigentlich für
Resize-Events zuständig ist). Dieser löst das Event (zumindest auf dem Mac)
jedoch leider nicht während des Vorgangs der Vergrößerung aus, sondern erst am Ende.

Ich hoffe, das hilft Dir weiter.

VG ROlf
 
Zuletzt bearbeitet:
C

Camino

Gast
Ein bisschen mehr Code wäre nicht schlecht. Was sind lc1, lc2 und c? Und wo kommen die her? Wie und wo werden ButtonPanel und LaeuferPanel erstellt? Wo werden welche LayoutManager benutzt?
 

marian04

Aktives Mitglied
Ja ich weiß, der Code-Schnippel war ein wenig kurz, aber die andere Methode hat super geklappt.

Musste das nur ein wenig auf meine Bedürfnisse anpassen.
Sehr saubere Lösung gefällt mir wirklich gut. Vielen dank :)



Liebe Grüße
 

marian04

Aktives Mitglied
Java:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
//import java.awt.Graphics;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;


/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 03.09.2011
  * @Marian
  */

public class oberfla extends JFrame {
  // Anfang Attribute
	// Menü
	JMenuBar menuBar = new JMenuBar();
	JMenu menu,menu1;
	JMenuItem Startseiteme,Laeufersucheme,Sponsorensucheme,Beendenme,Hilfeme,Aboutme;
	
	Methoden meth = new Methoden();
	
	JButton newRunner = new JButton("Neuer Läufer");
	JButton newSponsor = new JButton("Neuer Spnsor");
	JButton editRounds = new JButton("Runden eintragen");
	JButton printRechnung = new JButton("Rechnung drucken");
	JPanel pBack = new JPanel(); 
	JPanel pMenu = new JPanel();
	JPanel pLeft = new JPanel();
	JPanel pRight = new JPanel();
	JSplitPane pSplit = new JSplitPane();
	JLabel lc1 = new JLabel("lc1");
	JLabel lc2 = new JLabel("lc2");
	
	JTextField NachName = new JTextField("1");	
	JTextField VorName = new JTextField("2");	
	JTextField Alter = new JTextField("3");	
	JTextField Strasse = new JTextField("4");	
	JTextField HausNummer = new JTextField("5");	
	JTextField PostleitZahl = new JTextField("6");	
	JTextField Ort = new JTextField("7");	
	
	
	
	double dividerLocation = (1.0/4.0);
  // Ende Attribute

  public oberfla(String title) {
	  super(title);
	  
	 
	  setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	  int frameWidth = 800;
	  int frameHeight = 600;
	  setSize(frameWidth, frameHeight);
	  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	  int x = (d.width - getSize().width) / 2;
	  int y = (d.height - getSize().height) / 2;
	  setLocation(x, y);
	  Container c = getContentPane();
	 
	  // Menu
	  menu = new JMenu("Menü");
      menu1 = new JMenu("Info");
      
      Startseiteme = new JMenuItem("Startseite");
      menu.add(Startseiteme);
      Laeufersucheme = new JMenuItem("Läufersuche");
      menu.add(Laeufersucheme);
      Sponsorensucheme = new JMenuItem("Sponsorensuche");
      menu.add(Sponsorensucheme);
      Beendenme = new JMenuItem("Beenden");
      menu.add(Beendenme);
      
      Hilfeme = new JMenuItem("Hilfe");
      menu1.add(Hilfeme);
      Aboutme = new JMenuItem("About");
      menu1.add(Aboutme);
      
      menuBar.add(menu);
      menuBar.add(menu1);
      setJMenuBar(menuBar);
   
      // Aufteilung der Labels
      pBack.setLayout(new BorderLayout());
      pMenu.setBackground(Color.DARK_GRAY);
      pMenu.setPreferredSize(new Dimension(-1, 80));

      pLeft.setBackground(Color.GRAY);
      pLeft.setLayout(new FlowLayout());
      pLeft.add(newRunner);
      pLeft.add(newSponsor);
      pLeft.add(editRounds);
      pLeft.add(printRechnung);
      

      pRight.setBackground(Color.LIGHT_GRAY);
      pRight.setLayout(new FlowLayout());
      pRight.add(NachName);

      pSplit.setEnabled(false);

      pSplit.add(pLeft, JSplitPane.LEFT);
      pSplit.add(pRight, JSplitPane.RIGHT);

      pBack.add(pMenu, BorderLayout.NORTH);
      pBack.add(pSplit, BorderLayout.CENTER);

      add(pBack);

      setSize(800,600);
      setVisible(true);

      pSplit.setDividerLocation(dividerLocation);
      pSplit.setDividerSize(1);


   
    


    setResizable(false);
    setVisible(true);  
    
    // Aktionlistener Zuweisungen 
    Startseiteme.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	StartseitemeMenuItemActionPerformed(evt);
        }
    });
    
    Laeufersucheme.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	LaeufersuchemeMenuItemActionPerformed(evt);
        }
    });
    
    Sponsorensucheme.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	SponsorensuchemeMenuItemActionPerformed(evt);
        }
    });
    
    Beendenme.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	BeendenmeMenuItemActionPerformed(evt);
        }
    });
    
    Hilfeme.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	HilfemeMenuItemActionPerformed(evt);
        }
    });
    
    Aboutme.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	AboutmeMenuItemActionPerformed(evt);
        }
    });
    
    
    // ActionListener für Buttons
    
    newRunner.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	newRunnerMenuItemActionPerformed(evt);
        }
    });
    
    newSponsor.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	newSponsorMenuItemActionPerformed(evt);
        }
    });
    
    editRounds.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	editRoundsMenuItemActionPerformed(evt);
        }
    });
    
    printRechnung.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
        	printRechnungMenuItemActionPerformed(evt);
        }
    });
  
    
  }
  

  // Anfang Methoden
  private void newRunnerMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
	
	
	JPanel jp = new JPanel();
	pRight.add(jp);
	
	jp.add(VorName);
	jp.add(Alter);
	jp.add(Strasse);
	jp.add(HausNummer);
	jp.add(PostleitZahl);
	jp.add(Ort);
	System.out.print("hallo");
	repaint();
  }

  private void editRoundsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
		
	}
  
  private void printRechnungMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
		
	}

  
  private void newSponsorMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
		
	}

  private void StartseitemeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
		
	}


  private void LaeufersuchemeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
	   
    	meth.SucheVorNachNameLaufer("Bauer", "Martin");
    	
		}
  
    private void SponsorensuchemeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
	// TODO add your handling code here:
		}
  	private void BeendenmeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
	this.dispose();
  		}
  
	private void HilfemeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		}
  
	private void AboutmeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
		// TODO add your handling code here:
		}
  // Ende Methoden

  
	
	public static void main(String[] args) {
    new oberfla("Laufsoftware");
  }
}

Hier mal der Code, den ich bis jetzt zusammen habe.

Leider macht mir das Adden von Komponenten via Button irgendwie schwierigkeiten.

Lg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
berserkerdq2 Kann ich ein Rechteck mittig im Fenster halten, egal wie ich die Bildschirmgröße verändere? AWT, Swing, JavaFX & SWT 3
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
TheSepp Fenster um x Pixel bewegen, wenn man auf dem Knopf drückt AWT, Swing, JavaFX & SWT 10
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
OZAN86 einfaches Fenster öffnen scheitert AWT, Swing, JavaFX & SWT 18
G Zuletzt aktives Fenster, vor dem aktuell aktiven AWT, Swing, JavaFX & SWT 2
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
MiMa JavaFX Fenster in JavaFX öffnen Schliessen (Initialisierung) AWT, Swing, JavaFX & SWT 20
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
platofan23 JAVAFX zweites Fenster öffnen AWT, Swing, JavaFX & SWT 2
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
P JavaFX Fenster lädt nicht mehr AWT, Swing, JavaFX & SWT 4
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
D Swing Neues (3.) Fenster öffnen AWT, Swing, JavaFX & SWT 2
G JavaFX Fenster 1 Array übertragen zur Fenster 2 AWT, Swing, JavaFX & SWT 0
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
O JavaFX Fenster scließen AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
L Input aus Sub-Fenster Startfenster übergeben AWT, Swing, JavaFX & SWT 5
B AWT Fenster schließt nicht AWT, Swing, JavaFX & SWT 2
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
K JavaFX ObservableList + Fenster AWT, Swing, JavaFX & SWT 6
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
N Swing Sorry nicht mal ein Fenster öffnen... AWT, Swing, JavaFX & SWT 19
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
L Daten in neuem Fenster AWT, Swing, JavaFX & SWT 2
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
K Java Button öffnet neues Fenster AWT, Swing, JavaFX & SWT 5
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
X Swing 2 Fenster (1 im Vordergrund) AWT, Swing, JavaFX & SWT 6
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
T JavaFX ControlsFX-Notification öffnet nicht wenn kein JavaFX-Fenster offen. AWT, Swing, JavaFX & SWT 1
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
Tort-E JavaFX Fenster nachladen AWT, Swing, JavaFX & SWT 1
V Fenster in einem Fenster anordnen AWT, Swing, JavaFX & SWT 7
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
E Alles in einem Fenster AWT, Swing, JavaFX & SWT 5
A Fenster erstellen AWT, Swing, JavaFX & SWT 2
I Swing Beim Fenster das kleine Symbol(ICS) ändern AWT, Swing, JavaFX & SWT 3
K JavaFX Vorschau Bereich/Fenster einer bestehenden Group AWT, Swing, JavaFX & SWT 3
G Scrollbar für das Fenster einfügen AWT, Swing, JavaFX & SWT 3
X Fenster von außen ansprechen AWT, Swing, JavaFX & SWT 7
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
G JavaFX Neues Fenster erstellen AWT, Swing, JavaFX & SWT 3
A SWT Fenster bei MouseOver vergrößern AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben