gui (Beginner)

Status
Niet open voor verdere reacties.

revelian

Gebruiker
Lid geworden
20 mrt 2007
Berichten
81
Hoi allemaal,

Ik probeer een GUI te maken, maar dit wilt niet echt lukken. Wat ik uiteindelijk probeer te bereiken is het zetten van een x aantal panels in één frame. Nu heb ik wat lopen zoeken op het internet en ik heb al wat geprobeerd, maar gaat niet echt goed. Kan iemand mij uitleggen wat ik allemaal fout doe ?

Overigens heb ik ook wat comments vetgedrukt geplaats in de code waarvan ik niet weet wat er fout gaat, misschien dat iemand mij dit ook kan uitleggen ?

Dit is wat ik tot nu toe heb:

Code:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test extends JFrame {
    
    // frame aanmaken
    JFrame frame = new JFrame("Test Frame Dude !");
    
    // panels aanmaken
    JPanel panelBtn = new JPanel();
    JPanel panelLbl = new JPanel();
    JPanel panelMain = new JPanel();
    
    // het maken van een test button en label
    JLabel lbl = new JLabel("Test Label");
    JButton btn = new JButton("Test Button");

    public Test() {
       
        panelBtn.setLayout(null); [B]// Zonder dit werkt setBounds() niet? [/B]
        panelBtn.setSize(200, 200);
        btn.setBounds(50, 50, 100, 20);[B] // Waarom werke setLocation() niet ? [/B]
        panelBtn.add(btn);
        
        panelLbl.setLayout(null);
        panelLbl.setSize(200, 200);
        lbl.setBounds(50, 50, 100, 20);
        panelLbl.add(lbl);
        
        frame.getContentPane().add(panelBtn);[B] // Verschijnt wel . . .[/B]
        frame.getContentPane().add(panelLbl); [B]// Verschijnt niet ?[/B]
        
        [B]//frame.pack(); // dit lukt niet om de één of ander reden[/B]
        frame.setSize(500, 500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String args[]) {

        new Test();

    }
}
 
Ik ben zelf ook nog niet zo lang bezig met Java hoor, maar ik heb getracht zo veel mogelijk informatie erbij te zetten.
Als er vragen zijn weet je het forum te vinden.
Ik begin mijn commentaar iedere keer met "Clemens :" of "Clemens-tip :" .
Een goed boek eventueel is "Head First Java" van O'Reilly, maar het is wel allemaal Engels (ik weet niet of dat een probleem is).

Code:
// Clemens : één import is genoeg. Als je doet javax.swing.*; heb je ze allemaal.
// Clemens : Je hebt wel kans dat je ook iets uit awt pakt, dus heb ik meteen java.awt.*; erbij gezet.
// Clemens-tip : Kijk die packages ook eens na om te weten wat er ongeveer in staat.
import javax.swing.*;
import java.awt.*;


// Clemens : Je hoeft JFrame niet te extenden. Door de import javax.swing.*; is deze al bereikbaar.
// Clemens : Je wilt een eigen JFrame maken en niet een bestaande.
// Clemens-tip : Lees eens goed wat extends precies doet.
public class Test /** extends JFrame */ {

    // Clemens : Je geeft nergens aan wat de visibility is van je variabelen (public, protected, private ?).

    // frame aanmaken
    JFrame frame = new JFrame("Test Frame Dude !");

    // panels aanmaken
    JPanel panelBtn = new JPanel();
    JPanel panelLbl = new JPanel();
    JPanel panelMain = new JPanel();

    // het maken van een test button en label
    JLabel lbl = new JLabel("Test Label");
    JButton btn = new JButton("Test Button");

    // Clemens : Ik maak er nog even 1 label en 1 button bij
    private JLabel lbl2 = new JLabel("Test Label_2");
    private JButton btn2 = new JButton("Test Button_2");


    public Test() {
       // Clemens : Je Frame heeft nog helemaal geen Layout meegekregen.
       // Clemens : Je geeft aan je JFrame aan, en later aan je JPanel hoe je wilt dat ze de lay-out regelen. Dat doe je met setLayout().

//        panelBtn.setLayout(null); // Zonder dit werkt setBounds() niet?
//        panelBtn.setSize(200, 200);
//        btn.setBounds(50, 50, 100, 20); // Waarom werke setLocation() niet ?
//        panelBtn.add(btn);
//
//        panelLbl.setLayout(null);
//        panelLbl.setSize(200, 200);
//        lbl.setBounds(50, 50, 100, 20);
//        panelLbl.add(lbl);
//
//        frame.getContentPane().add(panelBtn); // Verschijnt wel . . .
//        frame.getContentPane().add(panelLbl); // Verschijnt niet ?



        // Clemens : Ik begin even overnieuw.

        // Clemens : Ik heb de layout manager BorderLayout gekozen voor het frame om zo het hele frame te kunnen vullen.
        // Clemens-tip : Lees iets over deze, maar ook de andere LayoutManagers. Het vullen moet je zelf even doen, ik doe alleen center.
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Clemens : Ik ken aan het panelMain een GridLayout toe met 2 rijen en 2 kolommen.
        // Clemens : Daarna voeg ik de labels en buttons aan het Panel toe.
        panelMain.setLayout(new GridLayout(2, 2));
        panelMain.add(lbl);
        panelMain.add(btn);
        panelMain.add(lbl2);
        panelMain.add(btn2);

        // Clemens : Nu voeg ik het panelMain toe aan het frame. Ik koppel het panel aan de CENTER van het Frame (BorderLayout)
        frame.add(panelMain, BorderLayout.CENTER);


        //frame.pack(); // dit lukt niet om de één of ander reden
        // Clemens : frame.pack() werkt prima ;-)
        // frame.setSize(500, 500);
        frame.pack();
        frame.setVisible(true);

        // Clemens : Dit heb ik elders al geregeld.
        // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String args[]) {
        // Clemens : Tuurlijk werkt dit, maar niet echt netjes als je grotere applicaties gaat schrijven.
        // Clemens : Ik zou zo en zo een non-argument constructor toevoegen aan je class, maar het hoeft niet perse.
        // Clemens : Maak er in ieder geval een nette initialisatie van met een type erbij.
        
        // new Test();
        Test test = new Test();

    }
}


Zo, nu ga ik mijn eigen vraag maar eens posten ;-).
 
Ahh, kijk eens,

Top ! Bedankt Clemens Schalkw,

Ik zal eens kijken naar het boek.

Verder is het uiteindelijk wel de bedoeling dat ik de Gui ga inplementeren bij een grotere applicatie, maar je moet ergens beginnen ;)

Nog bedankt voor de hulp, nu kan ik weer verder met onderzoeken !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan