Avatar billede aggie Nybegynder
27. december 2003 - 12:37 Der er 3 kommentarer og
1 løsning

Hvordan virker GridBags?

jeg har noget svært ved at rumme dokumentationen for GridBagLayouts og GridBagConstraints, jeg vil gerne have noget der virker ligesom html tables, altså fint alignede kolonner, men det bliver hæsligt ad h.. til :(
jeg har en en bunke objekter der hver leverer en række til et  overordnet objekts gui, det ser lige nu sådan her ud:

        ServicePanel = new JPanel();
        ServiceToggle = new JButton("Toggle");
        ServiceTitle = new JLabel(this.FriendlyName);
        ServiceStatus = new JLabel(this.getStatusMessage());

        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.insets = new Insets(0, 0, 0, 0);

        GridBagLayout ServiceLayout = new GridBagLayout();

        ServicePanel.setLayout(ServiceLayout);
        ServicePanel.add(ServiceTitle,gridBagConstraints);

        gridBagConstraints.gridx += 5;
        ServicePanel.add(ServiceStatus,gridBagConstraints);

        gridBagConstraints.gridx += 5;
        ServicePanel.add(ServiceToggle,gridBagConstraints);

- det giver godt nok lidt rum mellem de tre elementer, men de er ikke specielt ordnede i kolonner - kan nogen hjælpe mig lidt på vej?

/mvh Johnny
Avatar billede _carsten Nybegynder
27. december 2003 - 13:06 #1
GridBagLayout er lidt tuff at sætte sig ind i, men også en af de bedste - synes jeg

Men jeg skal prøve at gøre det forståeligt

Første kolonne og første række starter med nr. 0,0

Hvis du lægger en komponent i gridx/gridy (0,0) og sætter gridwidth = 2, så dækker komponenten altså kolonne 0 og 1, næste komponent skal derfor placeres i gridx/gridy (2,0)

En kolonne/række er nøjagtig så bred/høj som det areal den STØRSTE komponent optager, d.v.s komponenter som er mindre fylder ikke hele cellen ud med mindre du specifikt beder om det.

Du kan ligeledes vælge hvor i cellen komponenter skal placere sig (nord, syd øst, vest, center, nordøst etc.)

Prøver lige at strikke et eksempel sammen!
Avatar billede _carsten Nybegynder
27. december 2003 - 13:53 #2
Her har du 3 JPanels, indeholdene det samme antal JButtons, JButtton2 har samme størrelse i alle paneler, de sætter jeg bare til at opføre sig forskelligt, med ligeså forskelligt udseende tilfølge.

Eventuelle spørgsmål, så er jeg formentlig klar senere på aftenen, pt. slukkes pc'en.


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

public class Test extends javax.swing.JFrame {
   
    public Test() {
        initComponents();
    }
   
    private void initComponents() {
    panelA = new Panel1();
    panelB = new Panel2();
    panelC = new Panel3();
        panelA.setBorder(new javax.swing.border.EtchedBorder());
        panelB.setBorder(new javax.swing.border.EtchedBorder());
        panelC.setBorder(new javax.swing.border.EtchedBorder());
       
    getContentPane().setLayout(new java.awt.FlowLayout());

    getContentPane().add(panelA);
    getContentPane().add(panelB);
    getContentPane().add(panelC);

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

        pack();
    }
   

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

    public static void main(String args[]) {
        new Test().show();
    }
   
    Panel1 panelA;
    Panel2 panelB;
    Panel3 panelC;
}


class Panel1 extends JPanel {
    public Panel1() {
        jButton1 = new JButton();
        jButton2 = new JButton();
        jButton3 = new JButton();
        jButton4 = new JButton();
    GridBagConstraints gbc = new GridBagConstraints();

        setLayout(new GridBagLayout());
   
        jButton1.setText("jButton1");
        add(jButton1, gbc);

        jButton2.setText("jButton2");
        jButton2.setPreferredSize(new Dimension(120, 50));
        gbc.gridx = 0;
        gbc.gridy = 1;
        add(jButton2, gbc);

        jButton3.setText("jButton3");
        gbc.gridx = gbc.RELATIVE;
        gbc.gridy = gbc.RELATIVE;
        gbc.gridheight = 2;
        gbc.fill = gbc.VERTICAL;
        add(jButton3, gbc);

        jButton4.setText("jButton4");
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        gbc.fill = gbc.HORIZONTAL;
        add(jButton4, gbc);
    }
       
    private JButton jButton1;
    private JButton jButton2;
    private JButton jButton3;
    private JButton jButton4;
}


class Panel2 extends JPanel {
    public Panel2() {
        jButton1 = new JButton();
        jButton2 = new JButton();
        jButton3 = new JButton();
        jButton4 = new JButton();
    GridBagConstraints gbc = new GridBagConstraints();

        setLayout(new GridBagLayout());
   
        jButton1.setText("jButton1");
        gbc.anchor = gbc.WEST;
        add(jButton1, gbc);

        jButton2.setText("jButton2");
        jButton2.setPreferredSize(new Dimension(120, 50));
        gbc.gridx = 0;
        gbc.gridy = 1;
        add(jButton2, gbc);

        jButton3.setText("jButton3");
        gbc.gridx = gbc.RELATIVE;
        gbc.gridy = gbc.RELATIVE;
        gbc.gridheight = 2;
        add(jButton3, gbc);

        jButton4.setText("jButton4");
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        gbc.fill = gbc.HORIZONTAL;
        add(jButton4, gbc);
    }
       
    private JButton jButton1;
    private JButton jButton2;
    private JButton jButton3;
    private JButton jButton4;
}


class Panel3 extends JPanel {
    public Panel3() {
        jButton1 = new JButton();
        jButton2 = new JButton();
        jButton3 = new JButton();
        jButton4 = new JButton();
    GridBagConstraints gbc = new GridBagConstraints();

        setLayout(new GridBagLayout());
   
        jButton1.setText("jButton1");
        gbc.anchor = gbc.EAST;
        add(jButton1, gbc);

        jButton2.setText("jButton2");
        jButton2.setPreferredSize(new Dimension(120, 50));
        gbc.gridx = 0;
        gbc.gridy = 1;
        add(jButton2, gbc);

        jButton3.setText("jButton3");
        gbc.gridx = gbc.RELATIVE;
        gbc.gridy = gbc.RELATIVE;
        gbc.gridheight = 2;
        gbc.anchor = gbc.SOUTH;
        add(jButton3, gbc);

        jButton4.setText("jButton4");
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridwidth = 2;
        add(jButton4, gbc);
    }
       
    private JButton jButton1;
    private JButton jButton2;
    private JButton jButton3;
    private JButton jButton4;
}
Avatar billede _carsten Nybegynder
27. december 2003 - 14:06 #3
Kom lige til at tænke på GridLayout - måske mere din stil !

public class GridLayout extends javax.swing.JFrame {
   
    public GridLayout() {
        initComponents();
    }
   
    private void initComponents() {
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jButton9 = new javax.swing.JButton();

        getContentPane().setLayout(new java.awt.GridLayout(3, 3));

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

        jButton1.setText("jButton1");
        getContentPane().add(jButton1);

        jButton2.setText("jButton2");
        getContentPane().add(jButton2);

        jButton3.setText("jButton3");
        getContentPane().add(jButton3);

        jButton4.setText("jButton4");
        getContentPane().add(jButton4);

        jButton5.setText("jButton5");
        getContentPane().add(jButton5);

        jButton6.setText("jButton6");
        getContentPane().add(jButton6);

        jButton7.setText("jButton7");
        getContentPane().add(jButton7);

        jButton8.setText("jButton8");
        getContentPane().add(jButton8);

        jButton9.setText("jButton9");
        getContentPane().add(jButton9);

        pack();
    }
   

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

    public static void main(String args[]) {
        new GridLayout().show();
    }
   
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JButton jButton9;
}
Avatar billede aggie Nybegynder
27. december 2003 - 17:04 #4
GridLayout gør præcis det jeg ledte efter - 1000 tak :)
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