Layoutmanager

Reggie

Aktives Mitglied
Tach Zusammen,

Ich habe momentan eine Anwendung in der ich meiner Meinung nach unnötig kompliziert den View aktualisiere und die Grösse der Panels bestimme.

Momentan mache ich das so, ich ermittle die Menge der einzufügenden Panels und mache die Panels dann dem entsprechen 1/3, 1/2 oder 1/1 so gross wie das Parent Panel. Ziel des Ganzen ist das alle eingefügten Panels sichtbar sind und kein Scrollen erforderlich ist. Auch müssen die Panels jeweils eine Mindestbreite haben damit der Inhalt gut sichtbar ist.

Ich hoffe das ist verständlich.

Die Frage ist nun, kann man sowas auch mit einem Layoutmanager realisieren oder muss ich das wirklich von Hand rechnen und einfügen?
 
Tach Zusammen,
Die Frage ist nun, kann man sowas auch mit einem Layoutmanager realisieren oder muss ich das wirklich von Hand rechnen und einfügen?

Ich bin mir sicher, dass es geht. Die meisten LayoutManager verwenden die PreferredSize der Komponenten für das Layouting. Entsprechend groß wird auch die PreferredSize ihres Containers, aber damit kann man ja arbeiten.

Für mehr Hilfe sind deine Ausführungen zu theoretisch. Hast du schonmal LayoutManager ausprobiert und mit Minimum-, Preferred- und MaximumSize "herumgespielt"? Gibt es konkrete LayoutManager die dir vorschweben? Spontan würde mir das GridLayout einfallen, wo jede Zelle gleichgroß ist, oder ein BoxLayout ... ach, wahrscheinlich geht fast jeder LayoutManager 🙂
 
Hallo Krokodiehl,

Erstmal Danke für die Antwort 🙂

Ja rumgespielt habe ich mir den Sizes schonmal auch verschiedene Layouts ausprobiert momentan läuft das ganze mit FlowLayout aber leider wird der containing Panel scrollable sobald der Size zu gross ist. Um das abzufangen habe ich die Grösse des Containing Panel genommen und je nachdem halbiert oder gedrittelt um alle Panels darin anzuzeigen.

Ich weiss nicht genau wie ich dem Layout sagen soll das es,

wenn der Minimumsize aller Panel addiert mehr als die Grösse des Mutterpanel ausmacht, dass er dann einen Umbruch macht und dementsprechend natürlich die Höhe der vorhergehenden und der neuen Panels auch anpasst, weil er jetzt natürlich nicht mehr die volle Höhe zu Verfügung hat.

Dazu kommt noch das all das natürlich noch in einem resizeable Window gemacht wird.

Ich hab aber gerade selber noch eine Idee und probier das grad mal aus.
 
Hm. FlowLayout macht doch einen Umbruch der Komponenten, wenn sie insgesamt zu breit werden?! Aber du sprichst von Scrollbalken, d.h. du hast irgendwo ein ScrollPane gesetzt. Probier doch auch mal das zu entfernen / nicht zu setzen, oder sein
Code:
SCROLLBAR_POLICY
zu ändern, z.B. auf
Code:
NEVER
(die Java-Bezeichnungen heißen so ähnliche).
 
Stimmt habs raus wie es am besten geht. Oder zumindest einfacher als wie ich es bisher gemacht habe. Habe das wohl einfach lange nicht mehr angeschaut.

Trotzdem vielen Dank für die Denkanstösse.

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * blubb.java
 *
 * Created on 08.09.2011, 11:26:47
 */
package testthread;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.border.LineBorder;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.painter.GlossPainter;

/**
 *
 * @author mp
 */
public class blubb extends javax.swing.JFrame {

    /** Creates new form blubb */
    public blubb() {
        initComponents();
        int to = 56;
         GridLayout gl = (GridLayout) jXPanel2.getLayout();
        if (to > 21) {
           gl.setRows(4);
        } else if (to > 14) {
            gl.setRows(3);
        } else if (to > 7 ) {
            gl.setRows(2);
        } else {
            gl.setRows(1);
        }
        for (int i = 0; i < to; i++) {
            JXPanel tmp = new JXPanel();
            tmp.setBackground(Color.ORANGE);
            tmp.setBackgroundPainter(new GlossPainter());
            tmp.setBorder(new LineBorder(Color.BLACK, 2, true));
            tmp.setMinimumSize(new Dimension(100, 100));
            
            jXPanel2.add(tmp);
        }

    }

    /** 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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jXGradientChooser1 = new org.jdesktop.swingx.JXGradientChooser();
        jXPanel1 = new org.jdesktop.swingx.JXPanel();
        jXPanel2 = new org.jdesktop.swingx.JXPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(800, 600));
        getContentPane().setLayout(new java.awt.GridBagLayout());

        jXPanel1.setBackground(new java.awt.Color(102, 255, 102));
        jXPanel1.setMaximumSize(new java.awt.Dimension(175, 32755));
        jXPanel1.setMinimumSize(new java.awt.Dimension(175, 100));
        jXPanel1.setPreferredSize(new java.awt.Dimension(175, 600));

        javax.swing.GroupLayout jXPanel1Layout = new javax.swing.GroupLayout(jXPanel1);
        jXPanel1.setLayout(jXPanel1Layout);
        jXPanel1Layout.setHorizontalGroup(
            jXPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 175, Short.MAX_VALUE)
        );
        jXPanel1Layout.setVerticalGroup(
            jXPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 600, Short.MAX_VALUE)
        );

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        getContentPane().add(jXPanel1, gridBagConstraints);

        jXPanel2.setBackground(new java.awt.Color(153, 0, 153));
        jXPanel2.setPreferredSize(new java.awt.Dimension(640, 560));
        jXPanel2.setScrollableTracksViewportHeight(false);
        jXPanel2.setScrollableTracksViewportWidth(false);
        jXPanel2.setLayout(new java.awt.GridLayout());
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.weightx = 0.7;
        gridBagConstraints.weighty = 0.7;
        getContentPane().add(jXPanel2, gridBagConstraints);

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url=http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(blubb.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(blubb.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(blubb.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(blubb.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new blubb().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private org.jdesktop.swingx.JXGradientChooser jXGradientChooser1;
    private org.jdesktop.swingx.JXPanel jXPanel1;
    private org.jdesktop.swingx.JXPanel jXPanel2;
    // End of variables declaration                   
}
 

Zurück
Oben