Avatar billede emileej Nybegynder
28. februar 2003 - 10:05 Der er 10 kommentarer og
1 løsning

Alignment i GridBagLayout

Jeg har brugt alt for lang tid på at stykke et GridBagLayout sammen, men nu er det omsider lykkedes!
... næsten ...
Jeg vil gerne kunne styre alignment (left, center, right) på mine objekter i layoutets celler. For bedre at forstå - prøv at stykke noget kode sammen ud fra constuctoren her og tag et kig på det frygtlige syn :p


    public loginDialog(){
        serverField=new JTextField();
        serverField.setMinimumSize(new Dimension(100,20));
        serverField.setPreferredSize(new Dimension(100,20));
        portField=new JTextField(4);
        portField.setMinimumSize(new Dimension(50,20));
        portField.setPreferredSize(new Dimension(50,20));
        nameField=new JTextField();
        nameField.setMinimumSize(new Dimension(150,20));
        nameField.setPreferredSize(new Dimension(150,20));
        passField=new JPasswordField();
        passField.setMinimumSize(new Dimension(150,20));
        passField.setPreferredSize(new Dimension(150,20));
        loginBtn=new JButton("Login");
        loginBtn.setMinimumSize(new Dimension(75,20));
        loginBtn.setPreferredSize(new Dimension(75,20));
        loginBtn.addActionListener(this);
        cancleBtn=new JButton("Cancle");
        cancleBtn.setMinimumSize(new Dimension(75,20));
        cancleBtn.setPreferredSize(new Dimension(75,20));
        cancleBtn.addActionListener(this);

        GridBagLayout layout=new GridBagLayout();
        GridBagConstraints tmp=new GridBagConstraints();

        getContentPane().setLayout(layout);

        tmp.gridwidth=2;
        layout.setConstraints(serverField, tmp);
        getContentPane().add(serverField);
        tmp.gridx=tmp.RELATIVE;
        layout.setConstraints(portField, tmp);
        getContentPane().add(portField);
        tmp.gridwidth=1;
        tmp.gridy=1;
        layout.setConstraints(nameField, tmp);
        getContentPane().add(nameField);
        tmp.gridy=2;
        layout.setConstraints(passField, tmp);
        getContentPane().add(passField);
        tmp.gridwidth=2;
        tmp.gridy=3;
        tmp.gridx=0;
        layout.setConstraints(loginBtn, tmp);
        getContentPane().add(loginBtn);
        tmp.gridx=tmp.RELATIVE;
        layout.setConstraints(cancleBtn, tmp);
        getContentPane().add(cancleBtn);
       
        setTitle("Login");
        setSize(200, 150);
    }
Avatar billede _carsten Nybegynder
28. februar 2003 - 10:34 #1
Eks.
jLabelXXXX.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);

Hvis du arbejder meget med GUI og GridBagLayout, vil jeg da anbefale
dig, at skaffe et værktøj som eksempelvis "Sun ONE Studio 4".
Jeg synes den er kanon til det, men der findes også andre værktøjer.

Carsten
Avatar billede emileej Nybegynder
28. februar 2003 - 11:05 #2
Den metode du viser der indstiller alignment af teksten inde i mine tekstbokse - ikke selve tekstboksen.
Avatar billede _carsten Nybegynder
28. februar 2003 - 11:16 #3
Justerer din tekstboks.

tmp.anchor = java.awt.GridBagConstraints.WEST;
Avatar billede viht Nybegynder
28. februar 2003 - 11:37 #4
Du kan iøvrigt styre din komponenter nemmere ved at flytte GridBagLayout håndteringen ud i en selvstændig klasse.

// GridBagGUI.java:
import javax.swing.*;
import java.awt.*;

public class GridBagGUI {
 
  private GridBagConstraints gbc;
  private GridBagLayout layout;

  private Container container;
 
  public GridBagGUI( Container container ) {
    this.container = container;

    layout = new GridBagLayout();
    container.setLayout( layout );
   
    reset();
  }
 
  public void add( Component component ) {
    layout.setConstraints( component, gbc );
    container.add( component );
  }
 
  public void reset() {
    gbc = new GridBagConstraints();
  }
 
  public void size( int width, int height ) {
    gbc.gridwidth = width;
    gbc.gridheight = height;
  }
 
  public void position( int x, int y ) {
    gbc.gridx = x;
    gbc.gridy = y;
  }
 
  public void fill( int con ) {
    gbc.fill = con;
  }
 
  public void fill( char con ) {
    con = Character.toUpperCase( con );
   
    switch ( con ) {
      case 'H':
        fill( GridBagConstraints.HORIZONTAL );
        break;
               
      case 'V':
        fill( GridBagConstraints.VERTICAL );
        break;
               
      case 'B':
        fill( GridBagConstraints.BOTH );
        break;
               
      case 'N':
        fill( GridBagConstraints.NONE );
        break;
               
      default:
        System.out.println( "[GridBagGUI.fill( '" + con + "' )] Unknown GridBagConstraint mnemonic" );
        System.exit( 0 );
    }
  }
 
  public void fill( String con ) {

    if ( con.length() == 1 )
      fill( con.charAt( 0 ) );
    else {
      con = con.toUpperCase();
     
      if ( con.equals( "HORIZONTAL" ) )
        fill( GridBagConstraints.HORIZONTAL );
      else if ( con.equals( "VERTICAL" ) )
        fill( GridBagConstraints.VERTICAL );
      else if ( con.equals( "BOTH" ) )
        fill( GridBagConstraints.BOTH );
      else if ( con.equals( "NONE" ) )
        fill( GridBagConstraints.NONE );
      else {
        System.out.println( "[GridBagGUI.fill( '" + con + "' )] Unknown GridBagConstraint mnemonic" );
        System.exit( 0 );
      }
    }
  }
 
  public void weightx( double weight ) {
    gbc.weightx = weight;
  }
 
  public void weighty( double weight ) {
    gbc.weighty = weight;
  }
 
  public void insets( int top, int left, int botton, int right ) {
    gbc.insets = new Insets( top, left, botton, right );
  }
 
  public void insets( Insets insets ) {
    gbc.insets = insets;
  }
 
  public void ipad( int padx, int pady ) {
    gbc.ipadx = padx;
    gbc.ipady = pady;
  }
 
  public void anchor( int dir ) {
    gbc.anchor = dir;
  }
 
  public void anchor( String dir ) {
    dir = dir.toUpperCase();
   
    if ( dir.equals( "CENTER" ) || dir.equals( "C" ) )
      anchor( GridBagConstraints.CENTER );
    else if ( dir.equals( "NORTH" ) || dir.equals( "N" ) )
      anchor( GridBagConstraints.NORTH );
    else if ( dir.equals( "NORTHEAST" ) || dir.equals( "NE" ) )
      anchor( GridBagConstraints.NORTHEAST );
    else if ( dir.equals( "EAST" ) || dir.equals( "E" ) )
      anchor( GridBagConstraints.EAST );
    else if ( dir.equals( "SOUTHEAST" ) || dir.equals( "SE" ) )
      anchor( GridBagConstraints.SOUTHEAST );
    else if ( dir.equals( "SOUTH" ) || dir.equals( "S" ) )
      anchor( GridBagConstraints.SOUTH );
    else if ( dir.equals( "SOUTHWEST" ) || dir.equals( "SW" ) )
      anchor( GridBagConstraints.SOUTHWEST );
    else if ( dir.equals( "WEST" ) || dir.equals( "W" ) )
      anchor( GridBagConstraints.WEST );
    else if ( dir.equals( "NORTHWEST" ) || dir.equals( "NW" ) )
      anchor( GridBagConstraints.NORTHWEST );
    else {
      System.out.println( "[GridBagGUI.anchor( '" + dir + "' )] Unknown GridBagConstraint mnemonic" );
      System.exit( 0 );
    }
  }
}
// TestFrame.java:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class TestFrame extends JFrame {
   
    public TestFrame() {
        super("Test");
        setSize(400,400);
       
        JPanel panel = new JPanel();
        GridBagGUI gui = new GridBagGUI(panel);
       
        gui.fill("BOTH");
        gui.weightx(1.0);
        gui.weighty(1.0);
               
        JTextArea area = new JTextArea("",5,15);
        gui.position(0,0);
        gui.size(1,2);
        gui.add(area);
       
        JButton button1 = new JButton("1");
        gui.fill("NONE"); // Knapper
        gui.weightx(0.5);
        gui.size(1,1);
        gui.position(1,0);
        gui.add(button1);
               
        JButton button2 = new JButton("2");
        gui.position(1,1);
        gui.add(button2);
       
        getContentPane().add(panel, BorderLayout.CENTER);
    }
}

class TestIt {
    public static void main(String[] args) {
      new TestFrame().show();
  }
}
Avatar billede emileej Nybegynder
28. februar 2003 - 12:05 #5
Det var dog en overordentligt brugbar klasse du har dig der.
Men jeg er vist alligevel en spade til GridBagLayout (en influenza hjælper heller ikk på det). Kunne du ikke skrive et hurtigt eksempel på hvorden man anvender din klasse til at lave et layout som det beskrevet her?:
http://eej.dk/new/gridBagLayout.gif
Avatar billede viht Nybegynder
28. februar 2003 - 15:41 #6
Jo, det kan jeg godt. Det bliver lige lidt senere, jeg er ikke hjemme nu.
Avatar billede viht Nybegynder
28. februar 2003 - 19:10 #7
Hmm, det går vidst ikke helt i GridBag.. jeg kan i hvert fald ikke få de midterste komponenter til at centrere sig

// TestFrame.java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestFrame extends JFrame {
    public TestFrame() {
        super("GridBag Test");
        setSize(400,400);
       
        JPanel mainPanel = new JPanel();
        GridBagGUI gui = new GridBagGUI(mainPanel);
       
        gui.fill("HORIZONTAL");
        gui.anchor("WEST");
        gui.weightx(1.0);
        gui.insets(5,5,5,5);
        gui.size(2,1);
           
        JLabel topLabelLeft = new JLabel("Top label left");
        gui.position(0,0);
        gui.add(topLabelLeft);
        JTextField topFieldLeft = new JTextField("",10);
        gui.position(0,1);
        gui.add(topFieldLeft);
        JLabel topLabelRight = new JLabel("Top label right");
        gui.position(2,0);
        gui.add(topLabelRight);
        JTextField topFieldRight = new JTextField("",10);
        gui.position(2,1);
        gui.add(topFieldRight);
       
        JLabel middleLabelTop = new JLabel("Middle label top");
        gui.position(1,2);
        gui.add(middleLabelTop);
        JTextField middleFieldTop = new JTextField("",10);
        gui.position(1,3);
        gui.add(middleFieldTop);
        JLabel middleLabelBottom = new JLabel("Middle label bottom");
        gui.position(1,4);
        gui.add(middleLabelBottom);
        JTextField middleFieldBottom = new JTextField("",10);
        gui.position(1,5);
        gui.add(middleFieldBottom);
       
        gui.size(2,1);
        JButton bottomLeftButton = new JButton("Bottom left");
        gui.position(1,6);
        gui.add(bottomLeftButton);
        JButton bottomRightButton = new JButton("Bottom right");
        gui.position(2,6);
        gui.add(bottomRightButton);
       
        getContentPane().add(mainPanel, BorderLayout.CENTER);
    }
}
class TestIt {
    public static void main(String[] args) {
      new TestFrame().show();
  }
}

Jeg sætter de midterste komponenter ind på x==1, men de sætter sig helt til venstre alligevel. Højst sandsynlig fordi der ikke er komponenter på x==0.
Avatar billede =maddog= Nybegynder
01. marts 2003 - 02:23 #8
import java.awt.*;
import javax.swing.*;


public class PullDown extends JApplet {

    private GridBagConstraints gbc = new GridBagConstraints();
   
    public void init() {
        Container conts = getContentPane();
        conts.setLayout(new GridBagLayout());
        gbc.fill = GridBagConstraints.BOTH;
        gbc.insets = new Insets(2,2,getSize().width/40,getSize().width/40);
        gbc.weightx =1.0;
        gbc.weighty =1.0;
        gbc.gridwidth=GridBagConstraints.RELATIVE;
        JLabel jl; JTextField jtf; JButton jb;
        // Row 1
        jl = new JLabel("1");
        add(conts, jl);
        gbc.gridwidth=GridBagConstraints.REMAINDER;
        jl = new JLabel("2");
        add(conts, jl);
        // Row 2
        gbc.gridwidth=GridBagConstraints.RELATIVE;
        jtf = new JTextField("1");
        add(conts, jtf);
        gbc.gridwidth=GridBagConstraints.REMAINDER;
        jtf = new JTextField("2");
        add(conts, jtf);
        // Row 3,4,5 and 6
        gbc.insets.left=getSize().width/10;
        gbc.insets.right=getSize().width/10;
        gbc.weightx =2.0;
        jl = new JLabel("3");
        add(conts, jl);
        jtf = new JTextField("3");
        add(conts, jtf);
        jl = new JLabel("4");
        add(conts, jl);
        jtf = new JTextField("4");
        add(conts, jtf);
        // Row 7
        gbc.insets.left=getSize().width/40;
        gbc.insets.right=getSize().width/40;
        gbc.weightx =1.0;
        gbc.gridwidth=GridBagConstraints.RELATIVE;
        jb = new JButton("1");
        add(conts, jb);
        gbc.gridwidth=GridBagConstraints.REMAINDER;
        jb = new JButton("2");
        add(conts, jb);
    }
   
    public void add(Container con, Component com) {
        if (con.getLayout() instanceof GridBagLayout) {
            ((GridBagLayout)con.getLayout()).setConstraints(com,gbc);
            con.add(com);
        } else {
            con.add(com);
        }
    }
       
}
Avatar billede _carsten Nybegynder
01. marts 2003 - 11:03 #9
/**
*Selvom det efterhånden er vanskeligt, at uddybe dit spørgsmål yderligere,
*for du alligevel et løsningsforslag mere.
*
*Carsten
*/

public class TestGridBagLayout extends javax.swing.JFrame {

    public TestGridBagLayout() {
        initComponents();
    }
   

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

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jTextField4 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();

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

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

        jLabel1.setText("jLabel1");
        getContentPane().add(jLabel1, new java.awt.GridBagConstraints());

        jLabel2.setText("jLabel2");
        getContentPane().add(jLabel2, new java.awt.GridBagConstraints());

        jLabel3.setText("jLabel3");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.gridwidth = 2;
        getContentPane().add(jLabel3, gridBagConstraints);

        jLabel4.setText("jLabel4");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 4;
        gridBagConstraints.gridwidth = 2;
        getContentPane().add(jLabel4, gridBagConstraints);

        jTextField1.setText("jTextField1");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        getContentPane().add(jTextField1, gridBagConstraints);

        jTextField2.setText("jTextField2");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        getContentPane().add(jTextField2, gridBagConstraints);

        jTextField3.setText("jTextField3");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.gridwidth = 2;
        getContentPane().add(jTextField3, gridBagConstraints);

        jTextField4.setText("jTextField4");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 5;
        gridBagConstraints.gridwidth = 2;
        getContentPane().add(jTextField4, gridBagConstraints);

        jButton1.setText("jButton1");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 6;
        getContentPane().add(jButton1, gridBagConstraints);

        jButton2.setText("jButton2");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 6;
        getContentPane().add(jButton2, gridBagConstraints);

        pack();
    }
   

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

    public static void main(String args[]) {
        new TestGridBagLayout().show();
    }
   
   
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField4;
    private javax.swing.JTextField jTextField3;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel1;
}
Avatar billede =maddog= Nybegynder
14. marts 2003 - 16:46 #10
var det muligt vi kunne få lukket det her spørgsmål!?
Avatar billede emileej Nybegynder
09. januar 2006 - 14:49 #11
Rimeligt gammel tråd. Lukker.
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