Gå til innhold

GridBagLayout fyll horisontalt og vertikalt


Anbefalte innlegg

Hei. Har en JFrame som bruker GridBagLayout, men får den ikke helt til å vise seg frem slik jeg vil. Jeg har to tekstfelt som er lagt inn i vær sin JScrollPane. Den nederste skal ha høyde 40 (c.ipady = 40;), men den andre som er øverst vil jeg at skal fylle resten av plassen. Man har jo det som heter fill.VERTICAL, men jeg vil at den skal fylle både horisontalt og vertikalt. Her er i hvertfall koden min:

 

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

class GUI extends JFrame {

   JEditorPane editor = new JEditorPane();
   JScrollPane editorScroll = new JScrollPane(editor);

   JTextArea text = new JTextArea();
   JScrollPane textScroll = new JScrollPane(text);

   GUI() {

setTitle("GridBag GUI");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setLayout(new GridBagLayout());

GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 0.5;
c.weighty = 0.5;
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.PAGE_START;

add(editorScroll, c);

c.gridy = 1;
c.anchor = GridBagConstraints.PAGE_END;
c.ipady = 40;

add(textScroll, c);

setVisible(true);

   }

}

public class Run {

   public static void main(String[] args) {
new GUI();
   }

}

 

Noen som vet hvordan dette gjøres?

Lenke til kommentar
Videoannonse
Annonse
import javax.swing.*;
import java.awt.*;

class GUI extends JFrame {

JEditorPane editor = new JEditorPane();
JScrollPane editorScroll = new JScrollPane(editor);

JTextArea text = new JTextArea();
JScrollPane textScroll = new JScrollPane(text);

GUI() {

	setTitle("GridBag GUI");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setSize(400, 400);
	setLayout(new BorderLayout());

	add(editorScroll, BorderLayout.CENTER);
	add(textScroll, BorderLayout.NORTH);
	textScroll.setPreferredSize(new Dimension(400, 40));

	setVisible(true);

 }

}

public class Run {
public static void main(String[] args) {
	new GUI();
}
}

Har ikke testet koden, så den kompilerer sikkert ikke, men håper du tar tegningen ...

Endret av pgdx
Lenke til kommentar

Bedret koden litt

package no.kjey.insert.package.name;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class BorderLayoutTesting extends JFrame {
private static final long serialVersionUID = 42L;
private JEditorPane editor;
private JScrollPane editorScroll;
private JTextArea text;
private JScrollPane textScroll;

public BorderLayoutTesting() {
	initialize();
}

private void initialize() {
	editor = new JEditorPane();
	editorScroll = new JScrollPane(editor);
	text = new JTextArea();
	textScroll = new JScrollPane(text);
	setTitle("BorderLayout-GUI");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setSize(400, 400);
	setLayout(new BorderLayout());
	add(editorScroll, BorderLayout.CENTER);
	add(textScroll, BorderLayout.NORTH);
	textScroll.setPreferredSize(new Dimension(400, 40));
	setVisible(true);
}

public static void main(String[] args) {
	new BorderLayoutTesting();
}
}

Lenke til kommentar

Hvis du bruker new JTextArea(int antallLinjerSomSkalVises (2?), int minstAntallTegnSomSkalVises) slepper du pikselperfeksjonering, og ofte er det ønskerlig bare å vise hele linjer, ikke deler av neste/forrige linje også. Legg den sør i BorderLayouten, så vil den overstyre minstAntallTegnSomSkalVises og fylle bredden. Det vil den også gjøre dersom du resizer vinduet.

 

For å få JTextArea til å ikke bare skrive bortover kan du bruke <obj>.setLineWrap(true) (resultatet ligner da på å bruke JEditorPane), og <obj>.setWrapStyleWord(true) vil gjøre at ord ikke deles midt i ved linjeslutt.

Lenke til kommentar
  • 2 uker senere...

Hvis du vil at den skal strekke både i høyde og bredde, og skriver:

c.fill = GridBagConstraints.HORIZONTAL;

 

så fungerer det dårlig

 

c.fill = GridBagConstraints.BOTH;

 

fungerer litt bedre ;)

 

http://java.sun.com/j2se/1.4.2/docs/api/ja...onstraints.html

 

Hvis du skal rote rundt med GridBagLayout anbefaler jeg JBuilder 8 eller noe tilsvarende.. Oki da, sikkert ubrukelig pga dårlig JDK støtte, men de eldre versjonene av JBuilder hadde en svært god GUI builder, de nyere versjonene er fulle av bugs ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...