Anfänger: Layoutproblem !

Status
Nicht offen für weitere Antworten.

sunnyfriday

Aktives Mitglied
hallo Leute,

habe ein kleines Problem!!

Ich versuche ein Layout zu erstellen. Habe allerdings Probleme dass so zu machen, wie ich es will.

Wiefolgt möchte ich es realisieren.

Mein JFrame hat das Borderlayout.

Auf BorderLayout.NORTH kommt eine Toolbar.
Auf BorderLayout.WEST kommt ein JPanel.
Auf BorderLayout.CENTER kommt ein JPanel mit Cardlayout.
Auf Auf BorderLayout.SOUTH kommt eine JTextArea.

Soweit sogut.
Ich möchte aber im Bereich BorderLayout.SOUTH über der TextArea einen Button "refresh" platzieren.
der button soll aber nicht die komplette breite beanspruchen. Lediglich links über dem TextArea erscheinen.

Habe gedacht ich könnte es so machen, dass ich
Code:
        // initialize textarea
        this.textArea = new JTextArea(10,25);
        JScrollPane scrollPane = new JScrollPane(this.textArea);
        scrollPane.setBorder(BorderFactory.createTitledBorder("Text area"));
        
        JPanel footer = new JPanel();
        footer.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        footer.add(new JButton("refresh"));
        footer.add(scrollPane);
        
        getContentPane().add(footer,BorderLayout.SOUTH);
funktioniert aber nicht.

Wie kann ich das Problem am besten lösen?

Der komplette Code
Code:
package gui;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;

public class Gui extends JFrame{

	private static final long serialVersionUID = 1L;
	
    private JPanel leftpanel;
    CardLayout cl = new CardLayout();
    JPanel panel = new JPanel(cl); 
    JTextArea textArea;
    
	/**
	 * This is the default constructor
	 */
	public Gui() {
	
	    //left
		leftpanel = new JPanel();
		leftpanel.setPreferredSize(new Dimension(200, 150));
		
		//create start panel
		JPanel blankPanel = new JPanel();
        blankPanel.add(new JLabel("Center"));
        blankPanel.setBorder(BorderFactory.createTitledBorder("Data Editor"));
        panel.add(blankPanel, "HOME");
     
        // initialize gui
        this.setSize(800, 600);
        this.getContentPane().setLayout(new BorderLayout());
            
        JButton addButton = new JButton(new ImageIcon("images/new.png")); 
        JToolBar toolbar = new JToolBar(); 
        toolbar.add(addButton);
          
        this.getContentPane().add(toolbar, BorderLayout.NORTH);
        this.getContentPane().add(leftpanel,BorderLayout.WEST);
        this.getContentPane().add(panel,BorderLayout.CENTER);
       
        // initialize textarea
        this.textArea = new JTextArea(10,25);
        JScrollPane scrollPane = new JScrollPane(this.textArea);
        scrollPane.setBorder(BorderFactory.createTitledBorder("NDEF Message"));
        
        JPanel footer = new JPanel();
        footer.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        footer.add(new JButton("refresh"));
        footer.add(scrollPane);
        
        getContentPane().add(footer,BorderLayout.SOUTH);
        cl.show(panel, "HOME");
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Gui thisClass = new Gui();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});		
	}


}

danke für eure hilfe!

sunny
 
G

Gast

Gast
Eine mögliche, aber nicht gerade tolle Variante wäre, noch ein JPanel zu erzeugen, das ein BorderLayout besitzt.
Dem fügst du dann in WEST deinen Button hinzu und das Panel fügst du deinem footer Panel hinzu.
 

L-ectron-X

Gesperrter Benutzer
Es gibt, denke ich, 2 praktikable Lösungen:

1. Du erzeugst ein JPanel mit BorderLayout. In den Center-Bereich setzt du deine JTextArea. In den North-Bereich setzt du ein weiteres JPanel mit FlowLayout. Im Konstruktor des JPanels gibst du das Argument für die Ausrichtung der Components an.
Code:
super(new FlowLayout(FlowLayout.LEFT)); //wenn du von JPanel erbst
oder
Code:
panel.setLayout(new FlowLayout(FlowLayout.LEFT)); //wenn du ein JPanel instanziierst

2. Lösungsmöglichkeit: Mit GridBagLayout, weiter unten gibts ein Codebeispiel.

getContentPane() brauchst du seit Java 1.5 nicht mehr benutzen. Du kannst die Komponenten direkt der add()-Methode übergeben.
________________________________________________________________________________________________


Für Variante 1 habe ich mal 4 Zeilen hinzugefügt:
Code:
package gui;

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

public class Gui extends JFrame{

   private static final long serialVersionUID = 1L;

    private JPanel leftpanel;
    private CardLayout cl = new CardLayout();
    private JPanel panel = new JPanel(cl);
    private JTextArea textArea;

   /**
    * This is the default constructor
    */
   public Gui() {

       //left
      leftpanel = new JPanel();
      leftpanel.setPreferredSize(new Dimension(200, 150));

      //create start panel
      JPanel blankPanel = new JPanel();
        blankPanel.add(new JLabel("Center"));
        blankPanel.setBorder(BorderFactory.createTitledBorder("Data Editor"));
        panel.add(blankPanel, "HOME");

        // initialize gui
        this.setSize(800, 600);
        this.setLayout(new BorderLayout());

        JButton addButton = new JButton(new ImageIcon("images/new.png"));
        JToolBar toolbar = new JToolBar();
        toolbar.add(addButton);

        this.add(toolbar, BorderLayout.NORTH);
        this.add(leftpanel,BorderLayout.WEST);
        this.add(panel,BorderLayout.CENTER);

        // initialize textarea
        this.textArea = new JTextArea(10,25);
        JScrollPane scrollPane = new JScrollPane(this.textArea);
        scrollPane.setBorder(BorderFactory.createTitledBorder("NDEF Message"));

        JPanel footer = new JPanel(new BorderLayout());
        //footer.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        JPanel footerOptions = new JPanel(new FlowLayout(FlowLayout.LEFT));
        footerOptions.add(new JButton("refresh"));
        footer.add(footerOptions, BorderLayout.NORTH);
        footer.add(scrollPane, BorderLayout.CENTER);

        this.add(footer,BorderLayout.SOUTH);
        cl.show(panel, "HOME");
   }

   /**
    * @param args
    */
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            Gui thisClass = new Gui();
            thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            thisClass.setVisible(true);
         }
      });
   }
}

Variante 2 mit GridBagLayout sieht dann so aus:
Code:
package gui;

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

public class Gui extends JFrame{

   private static final long serialVersionUID = 1L;

    private JPanel leftpanel;
    private CardLayout cl = new CardLayout();
    private JPanel panel = new JPanel(cl);
    private JTextArea textArea;

   /**
    * This is the default constructor
    */
   public Gui() {

       //left
      leftpanel = new JPanel();
      leftpanel.setPreferredSize(new Dimension(200, 150));

      //create start panel
      JPanel blankPanel = new JPanel();
        blankPanel.add(new JLabel("Center"));
        blankPanel.setBorder(BorderFactory.createTitledBorder("Data Editor"));
        panel.add(blankPanel, "HOME");

        // initialize gui
        this.setSize(800, 600);
        this.setLayout(new BorderLayout());

        JButton addButton = new JButton(new ImageIcon("images/new.png"));
        JToolBar toolbar = new JToolBar();
        toolbar.add(addButton);

        this.add(toolbar, BorderLayout.NORTH);
        this.add(leftpanel,BorderLayout.WEST);
        this.add(panel,BorderLayout.CENTER);

        // initialize textarea
        this.textArea = new JTextArea(10,25);
        JScrollPane scrollPane = new JScrollPane(this.textArea);
        scrollPane.setBorder(BorderFactory.createTitledBorder("NDEF Message"));

        JPanel footer = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        //footer.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        
        gbc.anchor = GridBagConstraints.WEST;
        gbc.insets = new Insets(5, 5, 2, 0);
        footer.add(new JButton("refresh"), gbc);

        gbc.gridy = 1;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.CENTER;
        gbc.insets = new Insets(0, 0, 0, 0);
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        footer.add(scrollPane, gbc);

        this.add(footer, BorderLayout.SOUTH);
        cl.show(panel, "HOME");
   }

   /**
    * @param args
    */
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            Gui thisClass = new Gui();
            thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            thisClass.setVisible(true);
         }
      });
   }
}
 
G

Guest

Gast
hallo,

danke für die antworten.

habe es jetzt so gemacht wie dein erster Vorschlag. funktioniert!!!
danke!!!

Code:
package gui;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;

public class Gui extends JFrame{

	private static final long serialVersionUID = 1L;
	
    private JPanel leftpanel;
    CardLayout cl = new CardLayout();
    JPanel panel = new JPanel(cl); 
    JTextArea textArea;
    
	/**
	 * This is the default constructor
	 */
	public Gui() {
	
	    //left
		leftpanel = new JPanel();
		leftpanel.setPreferredSize(new Dimension(200, 150));
		
		//create start panel
		JPanel blankPanel = new JPanel();
        blankPanel.add(new JLabel("Center"));
        blankPanel.setBorder(BorderFactory.createTitledBorder("Data Editor"));
        panel.add(blankPanel, "HOME");
     
        // initialize gui
        this.setSize(800, 600);
        this.getContentPane().setLayout(new BorderLayout());
            
        JButton addButton = new JButton(new ImageIcon("images/new.png")); 
        JToolBar toolbar = new JToolBar(); 
        toolbar.add(addButton);
          
        this.getContentPane().add(toolbar, BorderLayout.NORTH);
        this.getContentPane().add(leftpanel,BorderLayout.WEST);
        this.getContentPane().add(panel,BorderLayout.CENTER);
       
        // initialize textarea
        this.textArea = new JTextArea(10,25);
        JScrollPane scrollPane = new JScrollPane(this.textArea);
        scrollPane.setBorder(BorderFactory.createTitledBorder("NDEF Message"));
        
        JPanel footer = new JPanel();
        footer.setLayout(new BorderLayout());
       
        footer.add(scrollPane, BorderLayout.CENTER);
        JPanel footer2 = new JPanel();
        footer2.setLayout(new FlowLayout(FlowLayout.LEFT));
        footer2.add(new JButton("Hallo"));
        
        footer.add(footer2, BorderLayout.NORTH);
         
   
        
        getContentPane().add(footer,BorderLayout.SOUTH);
        cl.show(panel, "HOME");
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Gui thisClass = new Gui();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});		
	}


}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
N 3D Games anfänger AWT, Swing, JavaFX & SWT 10
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
S Hilfe bei Java Gui Anfänger AWT, Swing, JavaFX & SWT 5
I Erste Desktop Software - blutiger Anfänger AWT, Swing, JavaFX & SWT 4
R Flickr-Flickr4Java Anfänger AWT, Swing, JavaFX & SWT 2
D [Anfänger]ComboBox erstellt Einträge in einer anderen ComboBox AWT, Swing, JavaFX & SWT 3
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
M JFrame - Anfänger, kurze Erklärung AWT, Swing, JavaFX & SWT 5
G Swing anfänger AWT, Swing, JavaFX & SWT 2
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
K AWT Anfänger AWT, Swing, JavaFX & SWT 6
K Swing SwingGUI - Erstellen für Anfänger AWT, Swing, JavaFX & SWT 15
P Anfänger Problem AWT, Swing, JavaFX & SWT 8
2 Anfänger problem: Buttenklick soll reagieren AWT, Swing, JavaFX & SWT 9
S Button Größe - Anfänger AWT, Swing, JavaFX & SWT 13
S Anfänger - JFrame/JLabel nicht sichtbar AWT, Swing, JavaFX & SWT 5
R Panel dupliziert sich und Textboxes werden nicht angezeigt [Anfänger] AWT, Swing, JavaFX & SWT 6
K GUI-Hilfe für Anfänger AWT, Swing, JavaFX & SWT 15
P Stack Anfänger AWT, Swing, JavaFX & SWT 8
R AWT [Anfänger] Darstellungsfehler bei Größenändereung einese Fensters AWT, Swing, JavaFX & SWT 2
R AWT [Anfänger] keine atives Aussehen von Buttons AWT, Swing, JavaFX & SWT 4
R AWT [Anfänger] Radio Buttons NetBeans 6.7.1 AWT, Swing, JavaFX & SWT 2
P Anfänger Probleme mit JTable bitte um Rat! AWT, Swing, JavaFX & SWT 5
E Anfänger-JPanel aus Menü aufrufen AWT, Swing, JavaFX & SWT 4
B Anfänger: Panel bei Button Klick anzeigen? AWT, Swing, JavaFX & SWT 4
L Design-Probleme (Swing-Anfänger) AWT, Swing, JavaFX & SWT 6
B GUI Anfänger -> Versionsunterschiede in Swing 1.5 / 1.4 . AWT, Swing, JavaFX & SWT 27
L Layoutproblem AWT, Swing, JavaFX & SWT 3
G AWT Layoutproblem AWT, Swing, JavaFX & SWT 11
Dragonfire Swing Layoutproblem AWT, Swing, JavaFX & SWT 4
J Layoutproblem: Bild im Thread AWT, Swing, JavaFX & SWT 5
P JComboBox.addItem erzeugt Layoutproblem mit JOptionPane AWT, Swing, JavaFX & SWT 2
D (GridBag)Layoutproblem - Komponentenbreite AWT, Swing, JavaFX & SWT 2
M Bestimmte GUI erstellen: Layoutproblem AWT, Swing, JavaFX & SWT 17
A Layoutproblem beim Vergrößern eines Frames AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben