Avatar billede trp79 Nybegynder
16. oktober 2003 - 00:48 Der er 7 kommentarer og
1 løsning

Omkring layout - Forment omkring GridBackLayout

Hejsa.
Jeg har lavet en GUI-klasse, hvor jeg har skelettet for min GUI. Denne klasse indholder flere JPanels i. Lad os bare kalde dem for jPanel1, jPanel2 osv. Jeg har så for hvert JPanel lavet en klasse, som extender JPanel, således at jeg i de respektive klasser kan lave min knapper, jlists osv. Layout manageren i de JPanels, der er i min GUI-klasse er sat til GridBackLayout. Samme layout manager er sat i hvert af de klasser der extender JPanel.

Min problem er så at når jeg i GUI-Klassen siger:
JPanel jPanel = new PanelUpperLeft() så fylder det panel jeg laver ikke den plads ud, der er afsat til det - men er identisk med det panel jeg har lavet i min PanelUpperLeft klasse. Jeg tror at min fejl ligger i brugen af GridBackLayout manageren. Har nogen en ide til hvad det kan være for en indstilling? Det er vel i de klasser der extender JPanel at der er en fejl?

Mvh
Torben
Avatar billede riversen Nybegynder
16. oktober 2003 - 08:26 #1
prøv at lege lidt med weightx og weighty i GridBagConstraints
Avatar billede _carsten Nybegynder
16. oktober 2003 - 09:02 #2
Dette burde rette op på det problem

gbc = new java.awt.GridBagConstraints();
gbc.fill = java.awt.GridBagConstraints.HORIZONTAL; // Udfylder horizontalt

gbc.fill = java.awt.GridBagConstraints.VERTICAL; //  // Udfylder vertikalt

gbc.fill = java.awt.GridBagConstraints.BOTH; // Udfylder hele cellen
Avatar billede trp79 Nybegynder
16. oktober 2003 - 11:21 #3
Jeg og arbejder i Oracle JDeveloper og syntes at jeg har sat fill rigtig - men jeg synes ikke at det hjælper :(
Det er måske fordi jeg ikke er med på hvad alle de indstillinger, der er i forbindelse med GridBackLayout gør. Anyway, jeg har lavet nogle screenshots, så jeg håber på at i har en ide om hvor jeg gør det galt.

Fra min main gui, hvor jeg har de forskellige paneler:
http://www.confunded.dk/TP/GUIMain.JPG
http://www.confunded.dk/TP/GUIMain-jPanel1.JPG

Det som svare til mit PanelUpperLeft i min problem beskrivelse:
http://www.confunded.dk/TP/PanelFirma - billede 1.JPG
http://www.confunded.dk/TP/PanelFirma - billede 2.JPG

jeg har iøvrigt smidt projektet(og dermed kildekoden) her, hvis det har interesse:
http://www.confunded.dk/TP/Kundekartotek-JDev.zip

Mvh
Avatar billede trp79 Nybegynder
16. oktober 2003 - 11:23 #4
Avatar billede _carsten Nybegynder
16. oktober 2003 - 11:59 #5
Skal nok kigge på det senere på dagen/aften, har ikke tid nu.
Avatar billede trp79 Nybegynder
16. oktober 2003 - 15:15 #6
Det lyder super :)
Avatar billede _carsten Nybegynder
16. oktober 2003 - 20:45 #7
Så har jeg langt om længe fået kigget på din kode, synes det er lidt vanskeligt at find og følge den røde tråd igennem det, om det skyldes JDeveloper's måde at skrive koden på eller din skal jeg være usagt, synes bare ikke den er særlig overskuelig.
Men du har ret, der er lidt problemer med layoutet, du definer og sætter det mange gange, vil tro du kan fjerne 80% af det.
Da jeg næsten var færdig med dit FirmaPanel, besluttede jeg istedet at lave et eksempel som viser ideen, jeg har kommenteret hvor jeg mener der er behov, er du i tvivl så spørg.

Prøv at køre eksemplet og resize det så du kan se hvad der sker.





public class TPFrame extends javax.swing.JFrame {
    public TPFrame() {
        initComponents();
    }

    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        // Husk når du initierer og add'er FirmePanel til din JFrame, så
        // er det af typen FirmaPanel ikke JPanel
        panel1 = new FirmaPanel();
        panel2 = new FirmaPanel();

        getContentPane().setLayout(new java.awt.GridBagLayout());

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;

        gridBagConstraints.weightx = 0.01;
        gridBagConstraints.weighty = 0.01;
        getContentPane().add(panel1, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;

        // panel2 skal fylde mest når der rezises
        gridBagConstraints.weightx = 0.20;
        gridBagConstraints.weighty = 0.20;
        getContentPane().add(panel2, gridBagConstraints);

        pack();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new TPFrame().show();
    }

    private FirmaPanel panel1;
    private FirmaPanel panel2;
}




class FirmaPanel extends javax.swing.JPanel {
    public FirmaPanel() {
        initComponents();
    }

    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList();
        jButton1 = new javax.swing.JButton();

        // Her sættes layout i det JPanel som du extender, men har omdøbt
        // til FirmaPanel og det skal ikke gøres flere gange
        setLayout(new java.awt.GridBagLayout());

        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("jLabel1");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;

        // weight.x og .y styrer hvor stor en del af det samlede tilgængelige
        // areal i panelet, som denne JLabel skal optage
        // Her har jeg angivet 0.01 altså en lille del af arealet
        // Maks. er iøvrigt 1.0
        gridBagConstraints.weightx = 0.01;
        gridBagConstraints.weighty = 0.01;
        add(jLabel1, gridBagConstraints);

        jScrollPane1.setViewportView(jList1);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;

        // ScrollPanet skal optage en væsentlig større del af pladsen
        // derfor er den sat til 0.15
        gridBagConstraints.weightx = 0.15;
        gridBagConstraints.weighty = 0.15;
        add(jScrollPane1, gridBagConstraints);

        jButton1.setText("jButton1");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;

        // JButton sat på samme niveau som JLabel
        gridBagConstraints.weightx = 0.01;
        gridBagConstraints.weighty = 0.01;
        add(jButton1, gridBagConstraints);

    }

    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JList jList1;
    private javax.swing.JScrollPane jScrollPane1;
}
Avatar billede trp79 Nybegynder
17. oktober 2003 - 12:24 #8
Det er forrygende Carsten - nu har jeg fået det til at virke udfra dit eksempel og specielt forklaringerne! :o)

Tak for hjælpen

mvh
Torben
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester