kjey Skrevet 16. november 2007 Del Skrevet 16. november 2007 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
pgdx Skrevet 16. november 2007 Del Skrevet 16. november 2007 Hva med heller å bruke en BorderLayout og plassere den som skal ta 40px i BorderLayout.NORTH og den andre i BorderLayout.CENTER? Jeg har dårlige erfaringer med GridbagLayout på det området der, men har ikke brukt den så mye. Lenke til kommentar
kjey Skrevet 17. november 2007 Forfatter Del Skrevet 17. november 2007 Ja, jeg kan jo gjøre det. Men mener du å legge f.eks. en JPanel i BorderLayout.SOUTH som har GridBagLayout, slik at jeg kan sette høyden til 40? Lenke til kommentar
pgdx Skrevet 17. november 2007 Del Skrevet 17. november 2007 (endret) 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 17. november 2007 av pgdx Lenke til kommentar
kjey Skrevet 17. november 2007 Forfatter Del Skrevet 17. november 2007 Ja ok, skjønner! Eneste problemet der er at når jeg utvider guiet vil ikke det nederste tekstområdet utvide seg Men jeg finner vel ut av det. Takk for hjelpen! Lenke til kommentar
pgdx Skrevet 17. november 2007 Del Skrevet 17. november 2007 Utvider GUI-et? Når du minsker det til mindre enn 400 x 40 (i høyden) vil området i center forsvinne, ja, men det er vel en trade-off du må akseptere når du vil ha et område til alltid å være 40px høyt. Lenke til kommentar
pgdx Skrevet 17. november 2007 Del Skrevet 17. november 2007 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
gunnard Skrevet 17. november 2007 Del Skrevet 17. november 2007 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
blackbrrd Skrevet 29. november 2007 Del Skrevet 29. november 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå