Avatar billede eksplayer Nybegynder
09. december 2003 - 00:50 Der er 7 kommentarer og
1 løsning

Opsætning af Layout

Hey

Jeg har været igang med at lave lidt gui og lavet opsætning med BoxLayout men synes at det lignede noget være noget. Jeg valgte derfor: setLayout(null) hvorefter jeg havde mulighed for at bruge setBounds.

MEN i samme øjeblik jeg begynder at bruge setBounds så ryger funktionaliteten af mine knapper. Er det ikke mærkeligt???

Er der nogen der har en ide til en løsning? Skal helst have det forklaret grundig - er ikke så skarp til det hersens java-hajs.
Avatar billede _carsten Nybegynder
09. december 2003 - 08:13 #1
Det afhænger en hel del af hvad du skal lave og hvor mange ting der skal proppes ind i den GUI, for der er mange måder at lave det på

Jeg bruger stort set aldrig andet en GridBagLayout, så kan jeg få det 100% som jeg vil have det - men den er nok lidt sej at starte med.

Ja, funktionaliteten ryger med nullLayout og setBounds.

Et gæt på en løsning er nok, at du bruger FlowLayout og en god portion paneler, ellers skal vi nok have en væsentlig bedre beskrivelse af hvad den gui skal indeholde af komponenter.
Avatar billede eksplayer Nybegynder
09. december 2003 - 17:11 #2
Gui'ens layoutet skal se således ud:


Overskrift

  ImageButton              ImageButton           
--------------------------------------------
knap  | Hele denne firkant      |  _______
knap  | indeholder en            | |      |
knap  | kalender (Gregorian)    | | text  |
      |                          | | field |
knap  |                          | |      |
knap  |                          | |_______|
      |                          |
      |                          |
Login |                          |
      |                          | 


Håber illustrationen virker.....

Er det muligt at give et eksempel på et sådan
layout - med FlowLayout?

- eller er det for langt ude??? :)
Avatar billede eksplayer Nybegynder
09. december 2003 - 17:11 #3
øv mellemrummene virkede ikke :(
Avatar billede _carsten Nybegynder
09. december 2003 - 17:52 #4
Jeg skal prøve at lave et eksempel senere på aftenen, det er ellers perfekt til GridBagLayout, men hvis du ikke er bekendt med det layout, kører du bare sur i det - så hvis du har tid til at vente !!
Avatar billede eksplayer Nybegynder
09. december 2003 - 17:58 #5
helt sikkert :)

Kan du evt. tilføje et par forklarende kommentarer til eksemplet - så er det måske lidt lettere at sætte sig ind i. Håber ikke det er ok...
Avatar billede eksplayer Nybegynder
09. december 2003 - 17:59 #6
kender iøvrigt intet til GridBagLayout
Avatar billede _carsten Nybegynder
09. december 2003 - 21:40 #7
Så fik jeg lavet noget som ligner - tror jeg
Har kommenteret lidt, hvis der er behov for mere
må du bare spørge.

Men du er nødt til at kigge her, for at se hvordan det bør gøres:
http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html

Kompiler nedenstående eksempel, det kan bruges - men kan nemt blive 10 gange bedre med GridBagLayout.


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

public class EksPlayer extends JFrame {
   

    public EksPlayer() {
        initComponents();
    }
   

    private void initComponents() {
        knapPanel1 = new KnapPanel();
        kalender1 = new Kalender();
        jTextArea1 = new JTextArea();

        getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                exitForm(evt);
            }
        });

        // Det er vigtigt at definere størrelsen på knappanelet
        // da knapperne adddes panelet i en lang række og når der ikke er
        // mere plads på øverste række, tilføjes resterende komponenter
        // på næste række o.s.v.
        // Hvis knappanelet skal være breddere, er du nødt til også at
        // lave knapperne større, ellers vil næste knap flytte op ved
        // siden af første knap

        knapPanel1.setPreferredSize(new Dimension(90, 190));
        getContentPane().add(knapPanel1);

        kalender1.setPreferredSize(new Dimension(90, 190));
        getContentPane().add(kalender1);

        jTextArea1.setBorder(new BevelBorder(BevelBorder.LOWERED));
        jTextArea1.setPreferredSize(new Dimension(90, 190));
        getContentPane().add(jTextArea1);

        pack();
    }
   
    private void exitForm(WindowEvent evt) {
        System.exit(0);
    }
   

    public static void main(String args[]) {
        new EksPlayer().show();
    }

    private JTextArea jTextArea1;
    private Kalender kalender1;
    private KnapPanel knapPanel1;   
}







class KnapPanel extends JPanel { 

    public KnapPanel() {
        initComponents();
    }
   
    // FlowLayout er default i JPanels derfor er det
    // ikke nødvendigt at sætte Layout
    private void initComponents() {
        jButton1 = new JButton();
        jButton2 = new JButton();
        jButton3 = new JButton();
        jButton4 = new JButton();
        jButton5 = new JButton();
        jButton6 = new JButton();

        setBorder(new EtchedBorder());

        jButton1.setText("Knap 1");
        add(jButton1);

        jButton2.setText("Knap 2");
        add(jButton2);

        jButton3.setText("Knap 3");
        add(jButton3);

        jButton4.setText("Knap 4");
        add(jButton4);

        jButton5.setText("Knap 5");
        add(jButton5);

        jButton6.setText("Login");
        add(jButton6);

    }
   
    private JButton jButton1;
    private JButton jButton2;
    private JButton jButton3;
    private JButton jButton4;
    private JButton jButton5;
    private JButton jButton6;   
}






class Kalender extends JPanel {
   
    public Kalender() {
        initComponents();
    }
   

    private void initComponents() {
        jLabel1 = new JLabel();

        // Her bruger jeg BorderLayout for at få Labellen
        // til at fylde hele panelet
        setLayout(new BorderLayout());

        setBorder(new EtchedBorder());
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Kalender panel");
        add(jLabel1, BorderLayout.CENTER);

    }
   
    private JLabel jLabel1;   
}
Avatar billede eksplayer Nybegynder
09. december 2003 - 22:20 #8
Tror helt sikkert jeg kan bruge det til noget. Synes det er vildt nok at du lige banker 150 linjers kode af - total i orden

Gode kommentarer, nice link - der er noget at arbejde videre med :) tak tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester