Gå til innhold

gridbaglayout oppfører seg rart(LØST)


Anbefalte innlegg

hei

 

kort versjon: hvorfor virker ikke gridbaglayouten, når både borderlayot,

gridlayout eller boxlayout virker?(gridbaglayouten oppfører seg som om det ikke skulle vært lagt til noe layout)

 

har laget et jpanel(mittPanel). Inni det vil jeg ha en del andre jpanel(panel2, men her i eksempelet har jeg bare 1).inni panel2 vil jeg ha flere jpanel, så jeg har laget et metode(createPanel) som returnerer et jpanel som jeg legger til i panel2.(dett gjøres 4 ganger). Problemet er at når dette vises så virker ikke gridbaglayouten på jlabelene som blir lagt til panelene som lages i metoden createPanel. Alt vises i en linje på skjermen. Men dersom jeg endrer layouoten(inne i metoden createPanel) til borderlayot,gridlayout eller boxlayout så virker de.

 

noen som kan hjelpe?

noen som har noen tips?

 

 

her er koden:

public class mittPanel extends JPanel {

 

private JPanel panel;

private JPanel panel2;

private JPanel panel3;

 

 

public mittPanel(){

 

panel = new JPanel();

panel2 = new panel2();

 

//setter gridbaglayout her, for å kunne legge til andre panel senere

setLayout(new GridBagLayout());

GridBagConstraints c = new GridBagConstraints();

 

c.ipadx = 0;

c.ipady = 0;

panel.add(panel2,c);

 

//lager scrollingen

setBackground(new Color(255,255,255));

JScrollPane jscrollPane = new JScrollPane(panel);

jscrollPane.getVerticalScrollBar().setUnitIncrement(10);

jscrollPane.getHorizontalScrollBar().setUnitIncrement(10);

 

setLayout(new BorderLayout());

add(panel,BorderLayout.WEST);

add(jscrollPane,BorderLayout.CENTER);

 

}

}

//***********************************************************************************

 

public class panel2 extends JPanel {

 

private JPanel p;

private JPanel p2;

private JPanel p3;

private JPanel p4;

 

public panel2(){

 

p = createPanel("tekst", "bilde.jpg");

p2 = createPanel("tekst2", "bilde.jpg");

p3 = createPanel("tekst2", "bilde.jpg");

p4 = createPanel("tekst2", "bilde.jpg");

 

setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

add(p);

add(p2);

add(p3);

add(p4);

 

}

}

//**********************************************************************

 

public class CreatePanel extends JPanel {

 

public CreatePanel(){}//tom konstruktor

 

public static JPanel createPanel(String navn, String bilde){

//har egentlig flere jlabels her, men for eksempelet skyld, har jeg utelatt de

Jpanel panel = new JPanel();

JLabel navn = new JLabel(navn);

Url bildeUrl = this.class.getResource(bilde);

JLabel bildeLabel = new JLabel(bildeIcon = new ImageIcon(bildeUrl));

 

 

panel.setBackground(new Color(255,255,255));

panel.setLayout(new GridBagLayout());

GridBagConstraints c = new GridBagConstraints();

 

c.ipadx = 0;

c.ipady = 0;

panel.add(navn,c);

c.ipadx = 1;

c.ipady = 0;

panel.add(bildeLabel,c);

 

return panel;

}

Endret av nebzen
Lenke til kommentar
Videoannonse
Annonse

dersom jeg kommenterer vekk panel.setLayout(new GridBagLayout());, så skjer det ingen forrandring.

men dersom jeg skriver panel.setLayout(new BoxLayout(panel,boxlayout.y_axis));

så virker det helt fint

hva er det jeg gjør galt?

Lenke til kommentar

Jeg vil på dette tidspunktet anbefale deg å finne deg en gui editor. JBuilder foundation har en god en.

 

Det er selvfølgelig noen triks å lære seg når man skal designe med gridbaglayout dog.. ;)

 

a) start med et panel du setter xylayout på

b) legg ut knapper, labeler, scrollpanes, etc ut sånn som du vil at de skal ligge

c) bytt til gridbaglayout - jbuilder gjør om for deg! Fett!

d) våkne opp og innse at nå er det brukt insets etc, etc.. sett padding/insets til 0 ved å velge alle komponentene og høyreklikke og velge constraints.

d) sett weight = 1.0 på x og y ettersom det passer og growth til horizontal, eller both alt ettersom. (Viktig! hvis du har 0 i x weight og grow horizontal, så fungerer det ikke, du må ha satt en verdi større enn 0).

 

Du har nå et gridbaglayout der ting vokser som de skal og du kan slippe unna masse nøstede paneler - ihvertfall til en hvis grad. Noen ganger er det enklere å legge til et panel og så legge til f.eks knapper til en toolbar...

 

Hvis du i gui designeren dobbeltklikker på en knapp vil den lage metoden som vil bli kallt hvis knappen blir dobbeltklikket på. - Har sett at nyere Jbuildere er satt opp til å lage en indre klasse, ikke en indre anonym klasse, noe jeg synes er irriterende. Det går det an å endre på i settings ;)

 

Send meg en pm hvis du lurer på noe og jeg ikke svarer i denne tråden.

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...