Første
Swing'it! serie, Planche nr. 25
Kursus Indhold

Udskrift af : Swing'it!

Planche 1 : Swing'it!

Planche 2 : Swing

Planche 3 : Hvorfor

Der var fejl og mangler i AWT:

Planche 4 : Hvordan

Planche 5 : Installation (JDK 1.1)

SET-kommandoerne tilføjes til autoexec og der rebootes

Det først punktum efter = i CLASSPATH er KRITISK!

Planche 6 : Installation (Netscape)

Hvis man kun vil se Swing-applets (f.eks. hos brugere), og man benytter Netscape: Installation i Internet Explorer som for JDK 1.1

Planche 7 : Installation (JDK 1.2)

Stort set alle browsere supporter plugins. Desværre er det kun en standard på Windows95. Men det er også KUN DER, der er forskelle på browsere..

Planche 8 : Oversigt

Swing består af 2 typer komponenter: Brug få tunge komponenter!

Planche 9 : Swing-programmering

//Set up the JPanel, which contains the text field and list.
JPanel panel = new JPanel();
panel.setLayout(new SomeLayoutManager());
panel.add(textField);
panel.add(list);

//topLevel is an instance of JApplet or JFrame
Container contentPane = topLevel.getContentPane();
contentPane.setLayout(new AnotherLayoutManager());
contentPane.add(button1);
contentPane.add(button2);
contentPane.add(panel);

Planche 10 : Altid en 'pane'!

Planche 11 : Forskel til AWT

Planche 12 : Component -> JComponent

JComponent som udvider AWTs Component tilføjer:

Planche 13 : Swing'er det?

Den "berømte" Swingset-demo!

(Forudsætter, at Swing er installeret i C:\Swing-1.0.3)

Planche 14 : Et simpelt eksempel

Sæt følgende vindue op:

Programmet ligger i SwingApplication.java og udfører følgende opgaver:

Planche 15 : Ex: import

Dette importerer swingklasser:
import com.sun.java.swing.*;    // Swing 1.0.x
import javax.swing.*;           // JDK 1.2

import java.awt.event.*;        // Uændret event-klasser
import java.awt.*               // Evt. ikke-grafiske awt-klasser

Planche 16 : Ex.: "Look and Feel"

public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel(
            UIManager.getCrossPlatformLookAndFeelClassName());
    } catch (Exception e) { }

    new SwingApplication(); //Create and show the GUI.
}
Dette giver den generelle java-grænseflade

Planche 17 : Ex.: Sæt topniveau

Der er kun et topniveau, en JFrame
public class SwingApplication ... {
    ...
    public SwingApplication() {
        //Create the top-level container.
        JFrame frame = new JFrame("SwingApplication");

        //...create a JButton and a JLabel...
        //...add them to a JPanel...

        //Add the JPanel to the frame.
        frame.getContentPane().add(pane, BorderLayout.CENTER);

        //Finish setting up the frame, and show it.
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        frame.pack();
        frame.setVisible(true);
    }
    ...
}

Planche 18 : Ex.: Knap og etiket

Initialiser knappen:
JButton button = new JButton("I'm a Swing button!");
button.setMnemonic('i');
button.addActionListener(this);
Initialiser etikette:
...//where instance variables are declared:
private JLabel label;
private static String labelPrefix = "Number of button clicks: ";
private int numClicks = 0;

...//in GUI initialization code:
label = new JLabel(labelPrefix + "0    ");
label.setLabelFor(button);

...//in the event handler for button clicks:
label.setText(labelPrefix + numClicks);

Planche 19 : Ex.: Tilføjer komponenter

Tilføj komponenter til container:
JPanel pane = new JPanel();
pane.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));
pane.setLayout(new GridLayout(0, 1));
pane.add(button);
pane.add(label);

Planche 20 : Ex.: Rammer

Sætter rammer omkring:
pane.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));
30 pixels til højre, venstre og i toppen, 10 pixels i bunden.

Planche 21 : Ex.: Hændelser

public class SwingApplication implements ActionListener {
    ...
    public SwingApplication() {
        ...
        button.addActionListener(this);
        ...
	frame.addWindowListener(new WindowAdapter() {
	    public void windowClosing(WindowEvent e) {
		System.exit(0);
	    }
	});
	...
    }

    public void actionPerformed(ActionEvent e) {
        numClicks++;
        label.setText(labelPrefix + numClicks);
    }
    ...
}

Planche 22 : EX.: Tråde mv.?

Der er ikke explicitte tråde i dette simple program.

Planche 23 : Ex.: Hjælpefunktioner

Der er indbygget støtte til hjælpfunktioner

Her er kun brugt en enkel:

label.setLabelFor(button);

Planche 24 : Øvelse 5a

Lav en GUI-JApplet m. Eventmodel

Planche 25 : Do it yourself