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); }
Annonceindlæg fra Conscia
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
28. februar 2003 - 11:05
#2
Den metode du viser der indstiller alignment af teksten inde i mine tekstbokse - ikke selve tekstboksen.
28. februar 2003 - 11:16
#3
Justerer din tekstboks. tmp.anchor = java.awt.GridBagConstraints.WEST;
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(); } }
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
28. februar 2003 - 15:41
#6
Jo, det kan jeg godt. Det bliver lige lidt senere, jeg er ikke hjemme nu.
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.
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); } } }
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; }
14. marts 2003 - 16:46
#10
var det muligt vi kunne få lukket det her spørgsmål!?
09. januar 2006 - 14:49
#11
Rimeligt gammel tråd. Lukker.
Kurser inden for grundlæggende programmering