Layoutprobleme bei Größenänderung

Status
Nicht offen für weitere Antworten.

air_canada

Mitglied
Mein Problem ist nicht ganz leicht zu beschreiben, ich versuchs mal so:

Ich möchte ein JFrame mit JLabels und JPanels versehen, die jeweils ihre Größe nur bedingt ändern. Beispielsweise soll ein Label sich nur horizontal vergrößern, während sich ein anderes nur vertikal ausbreiten soll. Folgendes Bild veranschaulicht das Problem:

vergroesserung.png


Die grün markierten Labels sollen ihre Größe gar nicht verändern, die gelben sich nur vertikal ausbreiten und die blauen nur horizontal. Der abstand der Labels soll zu den Frame-Rändern immer gleich sein. Zudem soll sich das mittlere JPanel (rot) sowohl vertikal aus auch horizontal ausdehnen.

Welcher Layoutmanager kommt dazu in Frage? Ich habe mich schon mit einem GUI-Builder auseinandergesetzt, doch der resultierende Code ist kaum wartbar und oftmals schmiert der GUI-Builder Editor nach kleinsten Veränderungen ab.

Hat jemand einen Vorschlag?
 

André Uhres

Top Contributor
Überhaupt kein Problem für BorderLayout :wink:

Dies hat alles der GUI Builder gemacht:
Code:
/*
 * NewJFrame2.java
 *
 * Created on 11. März 2008, 23:19
 */

package demo;


/**
 *
 * @author  André
 */
public class NewJFrame2 extends javax.swing.JFrame {
    
    /** Creates new form NewJFrame2 */
    public NewJFrame2() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        contentPanel = new javax.swing.JPanel();
        mainPanel = new javax.swing.JPanel();
        northPanel = new javax.swing.JPanel();
        northLabel1 = new javax.swing.JLabel();
        northLabel2 = new javax.swing.JLabel();
        leftPanel = new javax.swing.JPanel();
        rightPanel = new javax.swing.JPanel();
        southPanel = new javax.swing.JPanel();
        southLabel1 = new javax.swing.JLabel();
        southLabel2 = new javax.swing.JLabel();
        centerPanel = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        contentPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(30, 10, 30, 40));
        contentPanel.setLayout(new java.awt.BorderLayout());

        mainPanel.setLayout(new java.awt.BorderLayout());

        northPanel.setBackground(new java.awt.Color(51, 204, 255));
        northPanel.setLayout(new java.awt.BorderLayout());

        northLabel1.setBackground(new java.awt.Color(0, 255, 0));
        northLabel1.setOpaque(true);
        northLabel1.setPreferredSize(new java.awt.Dimension(10, 10));
        northPanel.add(northLabel1, java.awt.BorderLayout.WEST);

        northLabel2.setBackground(new java.awt.Color(0, 255, 0));
        northLabel2.setOpaque(true);
        northLabel2.setPreferredSize(new java.awt.Dimension(10, 10));
        northPanel.add(northLabel2, java.awt.BorderLayout.EAST);

        mainPanel.add(northPanel, java.awt.BorderLayout.PAGE_START);

        leftPanel.setBackground(new java.awt.Color(255, 255, 0));
        mainPanel.add(leftPanel, java.awt.BorderLayout.LINE_START);

        rightPanel.setBackground(new java.awt.Color(255, 255, 0));
        mainPanel.add(rightPanel, java.awt.BorderLayout.LINE_END);

        southPanel.setBackground(new java.awt.Color(51, 204, 255));
        southPanel.setLayout(new java.awt.BorderLayout());

        southLabel1.setBackground(new java.awt.Color(0, 255, 0));
        southLabel1.setOpaque(true);
        southLabel1.setPreferredSize(new java.awt.Dimension(10, 10));
        southPanel.add(southLabel1, java.awt.BorderLayout.WEST);

        southLabel2.setBackground(new java.awt.Color(0, 255, 0));
        southLabel2.setOpaque(true);
        southLabel2.setPreferredSize(new java.awt.Dimension(10, 10));
        southPanel.add(southLabel2, java.awt.BorderLayout.EAST);

        mainPanel.add(southPanel, java.awt.BorderLayout.PAGE_END);

        centerPanel.setBackground(new java.awt.Color(255, 102, 102));
        mainPanel.add(centerPanel, java.awt.BorderLayout.CENTER);

        contentPanel.add(mainPanel, java.awt.BorderLayout.CENTER);

        getContentPane().add(contentPanel, java.awt.BorderLayout.CENTER);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-400)/2, (screenSize.height-300)/2, 400, 300);
    }// </editor-fold>
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame2().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify
    private javax.swing.JPanel centerPanel;
    private javax.swing.JPanel contentPanel;
    private javax.swing.JPanel leftPanel;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JLabel northLabel1;
    private javax.swing.JLabel northLabel2;
    private javax.swing.JPanel northPanel;
    private javax.swing.JPanel rightPanel;
    private javax.swing.JLabel southLabel1;
    private javax.swing.JLabel southLabel2;
    private javax.swing.JPanel southPanel;
    // End of variables declaration
    
}
 

air_canada

Mitglied
Wow, vielen Dank. Die Layoutmanager sind weit mächtiger als ich vermutet hatte.
Hatte inzwischen auch eine Lösung mit dem GridBagLayout hinbekommen, aber das BorderLayout gefällt mir doch besser.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Mehrere Layoutprobleme AWT, Swing, JavaFX & SWT 2
H Layoutprobleme mit Jpanels AWT, Swing, JavaFX & SWT 2
S Layoutprobleme AWT, Swing, JavaFX & SWT 15
C Layoutprobleme AWT, Swing, JavaFX & SWT 12
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
B Vertikale Größenänderung zwischen zwei Widgets AWT, Swing, JavaFX & SWT 2
J ungewollt-automatische Größenänderung von JLabel AWT, Swing, JavaFX & SWT 5
U ToolTip Größenänderung, passt sich erst beim zweiten Mal an AWT, Swing, JavaFX & SWT 6
A JFrame Größenänderung AWT, Swing, JavaFX & SWT 3
A JFrame Größenänderung mit Maus und GridLayout AWT, Swing, JavaFX & SWT 10
A Swing JFileChooser - Größenänderung nach Aufruf von showOpenDialog() AWT, Swing, JavaFX & SWT 15
X Swing JTextPane bei Größenänderung Formatierung behalten AWT, Swing, JavaFX & SWT 11
B JFrame: Benachrichtung über Größenänderung AWT, Swing, JavaFX & SWT 4
Psypsy Swing JFrame Größenänderung Peformancefrage AWT, Swing, JavaFX & SWT 5
G Swing JScrollPane/Layoutmanger Problem bei dynamischer Größenänderung AWT, Swing, JavaFX & SWT 7
S Swing Inhalt eines Fenster bei Größenänderung anpassen (GroupLayout) AWT, Swing, JavaFX & SWT 2
T Swing Dialoginhalt automatisch anpassen während Größenänderung AWT, Swing, JavaFX & SWT 2
P TextArea Größenänderung AWT, Swing, JavaFX & SWT 4
S Panel austauschen, ohne Größenänderung des Frames AWT, Swing, JavaFX & SWT 5
C Auf Größenänderung eines Fensters (JFrame) reagieren AWT, Swing, JavaFX & SWT 2
C Event nach Größenänderung des Fensters AWT, Swing, JavaFX & SWT 3
E Größenänderung von nur EINER Seite einer SplitPane AWT, Swing, JavaFX & SWT 2
G awt panel for größenänderung schützen AWT, Swing, JavaFX & SWT 3
T SWT - Inhalt einer Shell erst nach Größenänderung vorhanden AWT, Swing, JavaFX & SWT 5
F Welche Layout-Methode wird bei Größenänderung aufgerufen? AWT, Swing, JavaFX & SWT 4
F Größenänderung mittels Maus - selbst implementieren? AWT, Swing, JavaFX & SWT 3
N JPanel zeichnet Inhalt erst nach Größenänderung des JFrames AWT, Swing, JavaFX & SWT 3
S JFrame und Größenänderung AWT, Swing, JavaFX & SWT 3
U JFrame bei Größenänderung immer neu zeichnen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben