Gå til innhold

FlowLayout inne i BorderLayout.SOUTH


Anbefalte innlegg

Videoannonse
Annonse

Hvis du sitter å lager gui til java i swing så anbefaler jeg Jbuilder Foundation som har en svært bra gui builder.

 

Du kan f.eks lage utkastet til gui'n i xy-layout og deretter gjøre om til f.eks gridbaglayout etterpå slik at komponentene kan vokse/minke utfra hvor stort vinduet er.

 

Jbuilder Foundation er også en ypperlig editor og kan lastes ned gratis fra borland sine websider.

 

Download sida

http://www.borland.com/downloads/download_jbuilder.html

 

Direktelink til Jbuilder Foundation

http://ussvs-bes1.borland.com/WebDownload/...ion.jsp?sid=524

 

Du må registrere deg med email for å få downloadet, men Borland er et rimelig kjent firma og driver ikke akkurat med spam. ;)

Lenke til kommentar

Takk for tipset, men skal først lære meg å kode designet selv :cool: Sitter egentlig å venter på NetBeans IDE 5.0 :dribble:

Menmen...

 

Hva er da galt med denne koden? Det kommer ingen feilmelding, men det vises ikke noe på GUI-formen :ermm:

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

class Main extends JFrame {
   
   public Main() {
       /* Generelle instillinger for GUI-designet */
       setSize(400, 400);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setTitle("Pro GUI");
       setLayout(new BorderLayout());
       setVisible(true);
       
       flowS flow = new flowS();
       add(flow, BorderLayout.SOUTH);
   }

   public static void main(String[] args) {
       Main program = new Main();
   }
   
}
class flowS extends JPanel {
   public flowS() {
       JPanel pnlSør = new JPanel(new FlowLayout());
       
       /* Knapper */
       JButton ok = new JButton("OK");
       JButton avbryt = new JButton("Avbryt");
       pnlSør.add(ok);
       pnlSør.add(avbryt);
   }
}

Lenke til kommentar

Du må hente en guiflate først. Tipper dette fikser biffen:

 

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

class Main extends JFrame {
  
  public Main() {
      super("Pro GUI");
      Container guiflate = getContentPane();

      /* Generelle instillinger for GUI-designet */
      setSize(400, 400);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLayout(new BorderLayout());
      setVisible(true);
      
      flowS flow = new flowS();
      guiflate.add(flow, BorderLayout.SOUTH);
  }

  public static void main(String[] args) {
      Main program = new Main();
  }
  
}
private class flowS extends JPanel {
  public flowS() {
      JPanel pnlSør = new JPanel(new FlowLayout());
      
      /* Knapper */
      JButton ok = new JButton("OK");
      JButton avbryt = new JButton("Avbryt");
      pnlSør.add(ok);
      pnlSør.add(avbryt);
  }
}

Lenke til kommentar

Funket desverre ikke, fikk feilmelding på at du hadde satt klassen flowS til private. Prøvde å ta den vekk, men da kom det ikke noe på skjermen utenom rammen med tittel på :dontgetit:

 

Feilmeldingen:

Main. java:29: modifier private not allowed here

Lenke til kommentar

Ikke at det har noe problemet ditt å gjøre, men iflg sun sin kodestandard:

 

Klasser skal alltid begynne med stor bokstav

Metoder skal alltid begynne med liten bokstav

Variabler skal alltid begynne med liten bokstav

 

Det finnes unntak som f.eks Konstructorer og Konstanter.

 

Ikke bruk forkortelser i navn, skriv dem helt ut. Bruk code completion for å slippe å skrive så mye.

 

Forslag til kodeendring, ikke kjørt gjennom noen compiler akkurat.. ;)

 

Tok meg den friheten å endre navn til noe mer informativt...

 

class OkCancelPanel extends JPanel {
 public OkCancelPanel () {
     this.setLayout(new FlowLayout());
     
     /* Knapper */
     JButton ok = new JButton("OK");
     JButton avbryt = new JButton("Avbryt");
     this.add(ok);
     this.add(avbryt);
 }
}

Endret av blackbrrd
Lenke til kommentar

Jeg ville også ha brukt // som kommentar, ikke /* */ når du skriver enlinjers kommentarer.

 

Hvis du av en eller annen grunn har lyst å kommentere bort en kodeblokk senere funker det ikke å bruke /* */ hvis du har flere kommentarer som bruker /* */ måten å kommentere på inni kodeblokken. Bruker du // går det greit derimot.

Lenke til kommentar

Eh...

 

Funket ikke forslaget mitt? Jeg gjorde mer enn å endre navn.

 

Her er et annet forslag (testet)

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

class PanelExample extends JFrame {
   JPanel okCancelPanel;

  public PanelExample() {
      // Generelle instillinger for GUI-designet
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setTitle("Pro GUI");
      this.getContentPane().setLayout(new BorderLayout());
      
      okCancelPanel = new JPanel();
      this.getContentPane().add(okCancelPanel, BorderLayout.SOUTH);
      JButton ok = new JButton("OK");
      JButton avbryt = new JButton("Avbryt");
      okCancelPanel.add(ok);
      okCancelPanel.add(avbryt);
   }

  public static void main(String[] args) {
      PanelExample program = new PanelExample();
      program.pack();
      program.setVisible(true);
      program.setSize(400, 400);

  }

}

 

Hvis du ikke kaller pack() metoden så vil ikke vinduet se riktig ut før du har resizet vinduet. Mao, ikke dumt å kjøre pack.. ;)

Endret av blackbrrd
Lenke til kommentar

Skjønner ikke hva som er galt! :ermm: Kopierte t.o.m koden du sendte (tusen takk for hjelpen forresten!) men fikk en melding:

 

Exception in thread "main" java.lang.IllegalArgumentException: cannot add to layout: constraint must be a string (or null)

 

Vinduet var tomt igjen...

Endret av kjey
Lenke til kommentar

Får også blackbrrd sin siste til å funke fint, men prøv denne da:

 

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

class PanelExample extends JFrame {

 public PanelExample() {
     super("Pro GUI");
     Container guiflate = getContentPane();
  
  JPanel pnlSør = new JPanel(new FlowLayout());
    
     /* Knapper */
     JButton ok = new JButton("OK");
     JButton avbryt = new JButton("Avbryt");
     pnlSør.add(ok);
     pnlSør.add(avbryt);
  
  
  guiflate.add(pnlSør);
    
  pack();
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setVisible(true);
 }

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

Lenke til kommentar

Den siste funket fint, men en ting: ser ikke ut som den er lagt i en BorderLayout!? Når jeg kjører applikasjonen vises knappene osv, men hvis jeg gjør om størrelsen på vinduet ligger knappen fortsatt øverst?

 

PS: Veldig takknemlig for at dere er tålmodige folk! :D

Endret av kjey
Lenke til kommentar

import javax.swing.*;

import java.awt.*;

class KnappeApp extends JFrame {

 

public KnappeApp() {

super("Pro GUI");

JPanel knappePanel=new JPanel();

knappePanel.setBackground(Color.BLACK);

JButton ok = new JButton("OK");

JButton avbryt = new JButton("Avbryt");

knappePanel.add(ok);

knappePanel.add(avbryt);

 

getContentPane().add(knappePanel, BorderLayout.SOUTH);

 

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

pack();

setVisible(true);

}

public static void main(String[] args) {

new KnappeApp();

}

}

 

Panelet var ikke plassert som BorderLayout.SOUTH, derfor ble knappene plassert øverst i vinduet.

To ting som er greit å vite:

- JFrame har BorderLayout som default.

- JPanel bruker FlowLayout som default.

- Når du arver (extends) fra klassen JFrame, trenger du ikke å lage en instans av Container.

 

Det kan i starten være litt forvirrende det med JFrame, Container, getContentPane() og JPanel. Særlig når det blir paneler inni andre paneler. Hvis man mister litt oversikten på hvor de forskjellige panelene er, kan det være greit å sette forskjellige bakgrunnsfarger på panelene (panel.setBackground(Color....)).

 

Tenk på JFrame som rammen på en tavle. Tenk på Container som innmaten i tavla. Tenk på getContentPane() som lim. Tenk på JPanel som poster-lapper.

Tja, noen som har en god metafor når det gjelder dette?

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