Avatar billede jugsaw Nybegynder
11. december 2003 - 20:15 Der er 13 kommentarer og
1 løsning

Hjælp til standart skabelon i forbindelse med Gui (Swing)

Hejsa
Jeg skal til at lave en grænseflade til mit program, i den forbindelse har jeg valgt at lave det i swing.

Jeg har min main metode i en kontrolklasse (ikke en entitetsklasse), som når programmet startes op skal kalde den første del af min gui.

Det jeg godt kunne bruge for at komme igeng, var en form for et skelet til guiklasse således at jeg kan se den overordnete struktur. Jeg er også intresseret i at få at vide hvordan jeg skaber forbindelsen fra min kontrolklasse til gui'en.

PS. hvis man har flere skærmbilleder, hvad er så bedst, at programmere det hele i en guiklasse, eller oprette en ny guiklasse for hvert skærmbillede. Hvis det sidste, hvordan laver jeg så forbindelsen mellen de forskelige guiklasser.
Avatar billede arne_v Ekspert
11. december 2003 - 20:17 #1
Man går ikke bare igang med Swing.

Man læser lidt om det.

Her er en lille appetit-vækker - et seimpelt program jeg lavede
den anden dag:

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

public class MultiButton extends JFrame implements ActionListener {
    JButton[] button;
    public MultiButton(int n) {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(5,n/5));
        button = new JButton[n];
        for(int i = 0; i < button.length; i++) {
            button[i] = new JButton("Button " + (i+1));
            button[i].addActionListener(this);
            getContentPane().add(button[i]);
        }
        pack();
    }

    public void actionPerformed(ActionEvent ev) {
        for(int i = 0; i < button.length; i++) {
            if (ev.getSource() == button[i]) {
                JOptionPane.showMessageDialog(null, "Number " + (i+1));
            }
        }
    }

    public static void main(String[] args) {
        MultiButton f = new MultiButton(20);
        f.show();
    }
}
Avatar billede magoo20000 Nybegynder
11. december 2003 - 20:18 #2
En gui-klasse for hvert skærmbillede er nok det bedste!

Evt. event-handler som inner-class er i en selvstændig klasse.

Eksempel følger.
Avatar billede arne_v Ekspert
11. december 2003 - 20:18 #3
Avatar billede arne_v Ekspert
11. december 2003 - 20:19 #4
Da man normalt laver skærme ved at lave en egen klasse som extender
JFrame, så skal du have en klasse per skærm.
Avatar billede soreno Praktikant
11. december 2003 - 20:19 #5
Jeg plejer at bruge dette skelet:

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

public class SwingTest extends JFrame implements ActionListener
{
    private JButton button;

    public SwingTest()
    {
        //swing init
        setTitle("TestKlasseSwing");
        JFrame.setDefaultLookAndFeelDecorated(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(5, 2));

        //add components
        button = new JButton("Tryk mig!");
        button.addActionListener(this);
        getContentPane().add(button);

        //Center Frame
        setSize(320, 200);
        setLocationRelativeTo(this);
    }

    public void actionPerformed(ActionEvent e)
    {
            //Gør dit og dat
    }

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

Du kan f.eks. sende en reference til din kontrolstruktur med i konstruktøren.

Jeg synes du bør lave en (GUI)klasse pr. skærmbillede.
Avatar billede magoo20000 Nybegynder
11. december 2003 - 20:23 #6
Avatar billede magoo20000 Nybegynder
11. december 2003 - 20:23 #7
Der kom jeg for sent :-(
Avatar billede magoo20000 Nybegynder
11. december 2003 - 20:26 #8
Rettelse til 20.18: Eventhandler som inner-class eller du kan implementerer et interface i din klasse (f.eks. ActionListener).

Vedr. en eller flere klasser, er der et designspørgsmål, som du bør afklare med dig selv:

Performance note: When considering whether to use an inner class, keep in mind that application startup time and memory footprint are typically directly proportional to the number of classes you load. The more classes you create, the longer your program takes to start up and the more memory it will take. As an application developer you have to balance this with other design constraints you may have. We are not suggesting you turn your application into a single monolithic class in hopes of cutting down startup time and memory footprint — this would lead to unnecessary headaches and maintenance burdens.
Avatar billede magoo20000 Nybegynder
11. december 2003 - 20:35 #10
Mht. hvordan din arkitektur kan være i din applikation, er der nogle udemærkede hints her: http://java.sun.com/products/jfc/tsc/articles/architecture/index.html

Det er en MVC opdeling (eller model, præsentationslag og controller).

Den er også meget brugt i J2EE (JSP, Servlet mm.) applikationer.
Avatar billede jugsaw Nybegynder
11. december 2003 - 22:23 #11
Hej Alle
Tak for svarende, mine points gåt til Soreno, da han kom nærmest det jeg gerne ville (se)/høre.
Avatar billede jugsaw Nybegynder
11. december 2003 - 22:25 #12
hmmm...hvordan giver man de points man har lovet?
Avatar billede soreno Praktikant
12. december 2003 - 08:04 #13
Det fungerer ved at jeg lægger et svar og du accepterer det.

Det er dog ikke muligt i dette spørgsmål, da du selv har svaret og accepteret points.

Det er nemlig kun muligt at accepterer point én gang.

Du kunne f.eks. oprettet et nyt spørgsmål med titlen "point til soreno" og så lægger jeg et svar i det (på et senere tidspunkt, typisk i aften).
Avatar billede jugsaw Nybegynder
12. december 2003 - 16:16 #14
(soreno) Dette er hermed gjort

http://www.eksperten.dk/spm/439161
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