kjey Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 Hei, driver å trikser litt med GUI designing i Java og lurer i den sammenheng på om det er noen som vet hvordan man kan ha "Flow" inne i BorderLayouten!? Går dette? Lenke til kommentar
Loomy Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 (endret) Det går an. Bare å opprette et nytt JPanel med FlowLayout: JPanel pnlSør = new JPanel(new FlowLayout()); Endret 11. januar 2006 av Loomy Lenke til kommentar
blackbrrd Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 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
kjey Skrevet 11. januar 2006 Forfatter Del Skrevet 11. januar 2006 Takk for tipset, men skal først lære meg å kode designet selv Sitter egentlig å venter på NetBeans IDE 5.0 Menmen... Hva er da galt med denne koden? Det kommer ingen feilmelding, men det vises ikke noe på GUI-formen 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
Loomy Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 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
kjey Skrevet 11. januar 2006 Forfatter Del Skrevet 11. januar 2006 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å Feilmeldingen: Main. java:29: modifier private not allowed here Lenke til kommentar
Loomy Skrevet 11. januar 2006 Del Skrevet 11. januar 2006 Ah, la akkurat merke til at flowS lå utenfor Main-klassen. Trodde det skulle være en privat indre klasse.. Lenke til kommentar
kjey Skrevet 12. januar 2006 Forfatter Del Skrevet 12. januar 2006 Ok, men jeg får det fremdeles ikke til selv om jeg tar bort private, hva skal jeg gjøre? Lenke til kommentar
blackbrrd Skrevet 12. januar 2006 Del Skrevet 12. januar 2006 (endret) 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 12. januar 2006 av blackbrrd Lenke til kommentar
blackbrrd Skrevet 12. januar 2006 Del Skrevet 12. januar 2006 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
kjey Skrevet 12. januar 2006 Forfatter Del Skrevet 12. januar 2006 Takk for tipsene, er ganske ny i Java og programmering generelt så det er fint med litt terping Men det løste ikke problemet mitt Hadde vært greit å lære hvordan man legger inn layouts inne i layouts! Lenke til kommentar
blackbrrd Skrevet 12. januar 2006 Del Skrevet 12. januar 2006 (endret) 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 12. januar 2006 av blackbrrd Lenke til kommentar
kjey Skrevet 13. januar 2006 Forfatter Del Skrevet 13. januar 2006 (endret) Skjønner ikke hva som er galt! 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 13. januar 2006 av kjey Lenke til kommentar
blackbrrd Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 Hei Det kommer med linjenr også. Nevnte jeg at hvis du bruker jbuilder og du får en feil så kan du trykke på feilen så hopper den til riktig linje for deg? Jeg bruker jdk 1.5-ett-eller-annet tror jeg Lenke til kommentar
Loomy Skrevet 13. januar 2006 Del Skrevet 13. januar 2006 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
kjey Skrevet 13. januar 2006 Forfatter Del Skrevet 13. januar 2006 (endret) 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! Endret 13. januar 2006 av kjey Lenke til kommentar
Vasily Skrevet 14. januar 2006 Del Skrevet 14. januar 2006 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
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å