Avatar billede ehdaniel Nybegynder
16. december 2003 - 11:12 Der er 2 kommentarer og
1 løsning

Hjælp til GUI

Hej! Jeg sidder med et projekt hvor jeg skal lave en forholdsvis simpel GUI (jeg skal kunne forklare koden til et mundtligt forsvar, så ikke noget fancy! :-)) Jeg har en superklasse hvor jeg har nogle faneblade, der skal figurere på alle GUIbilleder og det virker ok. Når jeg så extender til et nyt billede, har jeg lidt problemer med layout. Fx. kan jeg ikke få mine JTextFields til at ligge i to rows. Jeg har brugt noget gridlayout, hvor jeg har oprettet tre paneler, hvori jeg gerne vil have at disse JTextFields ligge øverst i to rækker med to knapper ved siden af og i midten et JTextArea, der fylder hele framen og til sidst i bunden en knap der er højrecentreret. Lige nu ligger alle JTextFields i en række, selvom  jeg giver argumentet med flere colomns. Er der nogen der kan hitte rede i denne kode?

public class KlientJournalGUI extends Forside implements ActionListener{
    private JButton gem, kontrakt, diagnoseskema;
    private JTextField navn = new JTextField();
    private JTextField adresse = new JTextField();
    private JTextField tlfnr = new JTextField();
    private JTextField cprnr = new JTextField();
    private JTextField dato = new JTextField();
    private JTextField konsultationsnr = new JTextField();
    private JTextArea journal = new JTextArea(" Journal:",15,50);
   
   
    public KlientJournalGUI(){
        JPanel north = new JPanel();
        JPanel center = new JPanel();
        JPanel south = new JPanel();
        Container con = getContentPane();
        north.setLayout(new GridLayout(7,4,1,1));
        JLabel label = new JLabel("Navn:", JLabel.RIGHT);
       
        north.add(label);
        north.add(navn);
        navn.setBounds(2,3,5,6);
        label = new JLabel("Adresse:", JLabel.RIGHT);
        north.add(label);
        north.add(adresse);
       
        label = new JLabel("Tlf.nr:", JLabel.RIGHT);
        north.add(label);
        north.add(tlfnr);
        label = new JLabel("Cpr.nr:", JLabel.RIGHT);
        north.add(label);
        north.add(cprnr);
        label = new JLabel("Dato:", JLabel.RIGHT);
        north.add(label);
        north.add(dato);
        label = new JLabel("Konsultation", JLabel.RIGHT);
        north.add(label);
        north.add(konsultationsnr);
       
        center.setLayout(new FlowLayout());
        center.add(journal);
       
       
//        JButton button = new JButton("Kontrakt", JButton.RIGHT);
       
        JButton gem = new JButton("Gem");
        gem.addActionListener(this);
        System.out.println("Der blev trykket på gem!");
        south.add(gem);
        tabJournal.add(north);
//        con.add(north);
        tabJournal.add(center);
        tabJournal.add(south);
//   
    }
    public void actionPerformed(ActionEvent event){
        if (event.getSource() == gem){
        System.out.println("Gemmer");
        }
}
public static void main(String[] args){
KlientJournalGUI k = new KlientJournalGUI();
k.setVisible(true);
}
}

MVH Elisabeth
Avatar billede rullemarie Praktikant
16. december 2003 - 11:25 #1
Hej,

jeg er ikke sikker, men du kan prøve at bruge XY-layout i stedet for Grid-layout. Det har jeg brugt, når jeg har lavet noget GUI. Det er et forsøg. Jeg kan ikke forklare hvorfor det skulle virke i stedet for.

MVH Rullemarie
Avatar billede ehdaniel Nybegynder
16. december 2003 - 11:26 #2
Har du evt noget API på det? Jeg kan ikke lige finde noget om det i min lærebog og ved ikke hvor jeg skal finde det henne :-)
Avatar billede _carsten Nybegynder
16. december 2003 - 13:06 #3
Du har initieret dit GridLayout til 7 rækker og 4 kolonner, altså 28 felter, men du har kun 12 elementer at putte i det, et gridLayout fyldes op ved først at fylde kolonne 1 derefter 2,3 og 4.

Du løser problemet på følgende måde

north.setLayout(new GridLayout(6,2,1,1));

Herefter adder du alle dine Labels, derefter alle dine TextFields, så funker det.
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