Swing Tutorial gesucht !

Status
Nicht offen für weitere Antworten.

jagdfalke

Bekanntes Mitglied
Hi, wie schon aus dem Titel ersichtlich ist suche ich ein guten Tutorial zur GUI-Programmierung mit Swing. Ich hab schon bei Sun HIER was gesehen aber das ist ja nicht so wirklich prickelnd, da ich noch Anfänger bin und allses ziemlich durcheinander angesprochen aber nicht ausführlich genug beschrieben wird.
Bücher darüber sind auch ok ! (Bei Amazon nach "Swing" suchen kann ich auch, möchte aber gerne eine Buchempfehlung damit ich das dann auch wirklich kapier)

mfg
jagdfalke
 

mic_checker

Top Contributor
Zum einen kannst du sicher im javabuch und java ist auch eine insel die ersten sachen nachlesen.

ansonsten hab ich noch den "Manning" hier, habs aber eher als Nachschlagewerk genutzt und nicht zum lernen.
 

jagdfalke

Bekanntes Mitglied
Ich hab mir mal ein paar Stellen von dem Sun-Tut durchgelesen, und hab festgstellt, dass die das ganz anders machen als ich es auf www.gailer-net.de und in der JavaInsel gelernt habe. Und ich denk mir mal, wenn Sun das so sagt wirds auch so gemacht oder? Bsp: der WindowAdapter wird bei Sun zu
Code:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
oder so ähnlich. Ja was denn nun? Den Apapter oder das? Oder wie ist das mit dem JFrame? Look and Feel? Hab ich in den 2 Tuts die ich gelesen hab noch nie gehört (glaub ich) und da werden die Frames auch von der Container-Klasse abgeleitet, also
Code:
HelloWorld frame = new HelloWorld();
Auch der UIManager wurde da nie beschrieben. Wenn schon will ich Java richtig lernen.
mfg
jagdfalke
 

L-ectron-X

Gesperrter Benutzer
Also bspw. diese Sache mit dem WindowListener/WindowAdapter und der setDefaultCloseOperation()-Methode ist doch recht einfach.
Die setDefaultCloseOperation()-Methode nimmst du, wenn du ganz einfach, kurz und bündig das Standardverhalten deines Fensters beim Schließen festlegen willst.
Wenn du dein Fenster nicht nur schließen, sondern vorher noch etwas erledigen möchtest, setzt du das Standardverhalten deines Fensters auf "Mache nichts" und überschreibst die Methoden des WindowListener bzw. den WindowAdapter.
Es gibt dazu schon mehrere Threads in diesem Forum, suche mal danach.
Und das, was du nicht findest, fragst du einfach hier im Forum. :wink:
 

jagdfalke

Bekanntes Mitglied
Es ging mir nicht um den einzelnen unterschied sondern allgemein um die beste Art sowas anzugehen. Es werden in dem Sun-Tutorial einfach viele Sachen vorrausgesetzt ohne richtig zu erklären wieso, usw.
Also was würdet ihr kaufen / lesen / euch nächtelang reinziehen, wenn jemand euer Gedächtnis betreffend Java auslöschen würde ;) ?

mfg
jagdfalke
 
R

Roar

Gast
jagdfalke hat gesagt.:
Es ging mir nicht um den einzelnen unterschied sondern allgemein um die beste Art sowas anzugehen. Es werden in dem Sun-Tutorial einfach viele Sachen vorrausgesetzt ohne richtig zu erklären wieso, usw.
naja es wird verlangt dass man java und oop im prinzip kann udn dass man die api lesen kann. ich mein, wenn man nicht weiß was interfaces sind, sollte man nen paar kapitel vorher im buch anfangen (so generell)

Also was würdet ihr kaufen / lesen / euch nächtelang reinziehen, wenn jemand euer Gedächtnis betreffend Java auslöschen würde ;) ?
huh? ne knarre würd ich mir kaufen ;)

javabuch, javainsel und das sun tutorial reichen vollkommen aus.

blablabla Oder wie ist das mit dem JFrame? Look and Feel? Hab ich in den 2 Tuts die ich gelesen hab noch nie gehört (glaub ich) und da werden die Frames auch von der Container-Klasse abgeleitet blablabla

sicher dass du nicht awt mit swing verwechselst? ich mein, lnf ist ein wichtiges kapitel in swing.
 

jagdfalke

Bekanntes Mitglied
also ich glaube ich poste mal am Besten einen Quelltext, den ich mir weder aus dem Sun-Tut. noch aus den anderen erklären kann:

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
Ok, das seh ich ein.

Code:
public class VoteDialog extends JPanel {
    JLabel label;
    JFrame frame;
    String simpleDialogDesc = "The candidates";

    public VoteDialog(JFrame frame) {
        super(new BorderLayout());

        this.frame = frame;
        JLabel title;
        
        //Create the components.
        JPanel choicePanel = createSimpleDialogBox();
        
        System.out.println("passed createSimpleDialogBox");
                
        title = new JLabel("Click the \"Vote\" button"
                           + " once you have selected a candidate.",
                           JLabel.CENTER);
        
        label = new JLabel("Vote now!", JLabel.CENTER);
        label.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        choicePanel.setBorder(BorderFactory.createEmptyBorder(20,20,5,20));

        //Lay out the main panel.
        add(title, BorderLayout.NORTH);  
        add(label, BorderLayout.SOUTH);        
        add(choicePanel, BorderLayout.CENTER);
    }
Warum wird hier nochmal frame deklariert? Ist doch schon in public static void main() passiert?
Warum wird an VoteDialog frame übergeben? Ist das nicht schon public weils direkt in der Klasse deklariert wurde?
Was bedeutet this.frame = frame ?
Ist mit "title" der Titel des Frames gemeint? Warum zum Geier ist der Titel ein Label?
Ist ein Panel nicht ein Bereich im Frame auf dem Komponenten angeordnet werden können? Was soll das mit der DialogBox?

Code:
    void setLabel(String newText) {
        label.setText(newText);
    }
Wie wärs einfach mit label.setText(newText); direkt im Code anstatt nochmal extra ne Methode aufzurufen?

Code:
    private JPanel createSimpleDialogBox() {
        final int numButtons = 4;
        JRadioButton[] radioButtons = new JRadioButton[numButtons];
        
        final ButtonGroup group = new ButtonGroup();

        JButton voteButton = null;

        final String defaultMessageCommand = "default";
        final String yesNoCommand = "yesno";
        final String yeahNahCommand = "yeahnah";
        final String yncCommand = "ync";

        radioButtons[0] = new JRadioButton(
          "<html>Candidate 1: <font color=red>Sparky the Dog</font></html>");
        radioButtons[0].setActionCommand(defaultMessageCommand);

        radioButtons[1] = new JRadioButton(
           "<html>Candidate 2: <font color=green>Shady Sadie</font></html>");
        radioButtons[1].setActionCommand(yesNoCommand);

        radioButtons[2] = new JRadioButton(
            "<html>Candidate 3: <font color=blue>R.I.P. McDaniels</font></html>");
        radioButtons[2].setActionCommand(yeahNahCommand);

        radioButtons[3] = new JRadioButton(
            "<html>Candidate 4: <font color=maroon>Duke the Java<font size=-2><sup>TM</sup></font size> Platform Mascot</font></html>");
        radioButtons[3].setActionCommand(yncCommand);


        for (int i = 0; i < numButtons; i++) {
            group.add(radioButtons[i]);
        }

        //Select the first button by default.
        radioButtons[0].setSelected(true);

        voteButton = new JButton("Vote");
        
        voteButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String command = group.getSelection().getActionCommand();

                //ok dialog
                if (command == defaultMessageCommand) {
                    JOptionPane.showMessageDialog(frame,
                       "This candidate is a dog. Invalid vote.");

                //yes/no dialog
                } else if (command == yesNoCommand) {
                    int n = JOptionPane.showConfirmDialog(frame,
                       "This candidate is a convicted felon. \nDo you still want to vote for her?",
                       "A Follow-up Question",
                       JOptionPane.YES_NO_OPTION);
                    if (n == JOptionPane.YES_OPTION) {
                        setLabel("OK. Keep an eye on your wallet.");
                    } else if (n == JOptionPane.NO_OPTION) {
                        setLabel("Whew! Good choice.");
                    } else {
                        setLabel("It is your civic duty to cast your vote.");
                    }

                //yes/no (with customized wording)
                } else if (command == yeahNahCommand) {
                    Object[] options = {"Yes, please", "No, thanks"};
                    int n = JOptionPane.showOptionDialog(frame,
                       "This candidate is deceased. \nDo you still want to vote for him?",
                       "A Follow-up Question",
                       JOptionPane.YES_NO_OPTION,
                       JOptionPane.QUESTION_MESSAGE,
                       null,
                       options,
                       options[0]);
                    if (n == JOptionPane.YES_OPTION) {
                        setLabel("I hope you don't expect much from your candidate.");
                    } else if (n == JOptionPane.NO_OPTION) {
                        setLabel("Whew! Good choice.");
                    } else {
                        setLabel("It is your civic duty to cast your vote.");
                    }

                //yes/no/cancel (with customized wording)
                } else if (command == yncCommand) {
                    Object[] options = {"Yes!",
                                        "No, I'll pass",
                                        "Well, if I must"};
                    int n = JOptionPane.showOptionDialog(frame,
                                    "Duke is a cartoon mascot. \nDo you  "
                                    + "still want to cast your vote?",
                                    "A Follow-up Question",
                                    JOptionPane.YES_NO_CANCEL_OPTION,
                                    JOptionPane.QUESTION_MESSAGE,
                                    null,
                                    options,
                                    options[2]);
                    if (n == JOptionPane.YES_OPTION) {
                        setLabel("Excellent choice.");
                    } else if (n == JOptionPane.NO_OPTION) {
                        setLabel("Whatever you say. It's your vote.");
                    } else if (n == JOptionPane.CANCEL_OPTION) {
                        setLabel("Well, I'm certainly not going to make you vote.");
                    } else {
                        setLabel("It is your civic duty to cast your vote.");
                    }
                }
                return;
            }
        });
        System.out.println("calling createPane");
        return createPane(simpleDialogDesc + ":",
                          radioButtons, 
                          voteButton);                    
    }
    
    private JPanel createPane(String description,
                              JRadioButton[] radioButtons,
                              JButton showButton) {
        int numChoices = radioButtons.length;
        JPanel box = new JPanel();
        JLabel label = new JLabel(description);

        box.setLayout(new BoxLayout(box, BoxLayout.PAGE_AXIS));
        box.add(label);

        for (int i = 0; i < numChoices; i++) {
            box.add(radioButtons[i]);
        }

        JPanel pane = new JPanel(new BorderLayout());
        pane.add(box, BorderLayout.NORTH);
        pane.add(showButton, BorderLayout.SOUTH);
        System.out.println("returning pane");
        return pane;
    }
Was ist das hier eigenlich so generell?


Code:
    private static void createAndShowGUI() {
        //Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);
       
        //Create and set up the window.
        JFrame frame = new JFrame("VoteDialog");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

        //Set up the content pane.
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new GridLayout(1,1));
        contentPane.add(new VoteDialog(frame));

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
Ok des check ich einigermaßen, aber:
Warum frame.getContentPane() nochmal mit contentPane gleichsetzen?

Code:
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
Das nehm ich einfach mal so hin.[/code]
 
R

Roar

Gast
jagdfalke hat gesagt.:
Warum wird hier nochmal frame deklariert? Ist doch schon in public static void main() passiert?
was meinst du? wo wird frame nochmal deklariert? in der main methode (unten) wird nix deklariert

Warum wird an VoteDialog frame übergeben? Ist das nicht schon public weils direkt in der Klasse deklariert wurde?
ähh? der satz macht irgendwie keinen sinn, ich vrsteh ihn jedenfalls nicht.

Was bedeutet this.frame = frame ?
this referenziert auf das aktuelle objekt, was eine zuweisung ist weißt du?

Ist mit "title" der Titel des Frames gemeint? Warum zum Geier ist der Titel ein Label?
nein ist es nicht. wie kommst du dadrauf? title ist ein JLabel was später im code dem panel geaddet wird.

Ist ein Panel nicht ein Bereich im Frame auf dem Komponenten angeordnet werden können?
ja

Was soll das mit der DialogBox?
welche dialogbox? es wird kein dialog angezeigt.

Wie wärs einfach mit label.setText(newText); direkt im Code anstatt nochmal extra ne Methode aufzurufen?
weil setText("bla"); kürzer ist als VoteDialog.this.label.setText("bla");

Was ist das hier eigenlich so generell?
ähhh... java?

Warum frame.getContentPane() nochmal mit contentPane gleichsetzen?
weils kürzer und ein paar ns schneller ist.

Das nehm ich einfach mal so hin.
nö. das ist eigentlich sinnlos das invokeLater() an dieser stelle.

edit: hättst den code ruhig mal ausführen können, dann hättest du ihn sicher besser verstanden
 

T1M

Bekanntes Mitglied
buchtip:
Handbuch der Java-Programmierung von Guido Krüger.
ich finds ganz gut und komm auch mit zurecht. auch wenn es nicht alles beantwortet ...
 

jagdfalke

Bekanntes Mitglied
Danke für den Buchtip !
Ich meinte: Warum steht sowohl in der Methode createAndShowGUI() JFrame frame = new JFrame("VoteDialog") und dann in der Klasse VoteDialog nochmal JFrame frame; ?
Und warum extendet VoteDialog JPanel? Ich dachte man braucht immer ein Frame !?
Oh man, je mehr ich mir den Code anschau, desto mehr Fragen stellen sich mir :(

mfg
jagdfalke
 
R

Roar

Gast
jagdfalke hat gesagt.:
Ich meinte: Warum steht sowohl in der Methode createAndShowGUI() JFrame frame = new JFrame("VoteDialog") und dann in der Klasse VoteDialog nochmal JFrame frame; ?
na und? dadurch werden auch nicht 2 frames erzeugt.
woher sollte VoteFrame auch sonsat den Frame kennen? irgendeiner muss ihm den frame doch geben...

Und warum extendet VoteDialog JPanel? Ich dachte man braucht immer ein Frame !?
du hast doch einen Frame!?

vielleicht solltest du erstmal noch was grundlegenderes lesen, über OOP z.B. und so. deine Fragen haben nicht viel mit Swing zu tun, eher mit generellen java sachen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
P Hintergrundbild in Swing einfügen Java Basics - Anfänger-Themen 3
C Swing frage Java Basics - Anfänger-Themen 8
T Rechenprogramm mit Swing Java Basics - Anfänger-Themen 3
K Swing Darstellungsproblem Java Basics - Anfänger-Themen 11
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
P Swing - Blackscreen Java Basics - Anfänger-Themen 10
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
M Klassen Hilfe bei SWING Java Basics - Anfänger-Themen 5
S GUI Problem: Swing Java Basics - Anfänger-Themen 8
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
B Erste Schritte Primefaces -> Swing Gui Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S Programmoberfläche mit Java-Swing - Herangehensweise Java Basics - Anfänger-Themen 20
E Fragen zu paintXXX in Swing Java Basics - Anfänger-Themen 7
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
J Swing Timer Java Basics - Anfänger-Themen 3
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2
D GPS Tracker Swing Java Basics - Anfänger-Themen 2
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
B Einstieg in swing GUI Java Basics - Anfänger-Themen 7
S Swing Eingabe Erzwingen Java Basics - Anfänger-Themen 3
S Swing JTable Java Basics - Anfänger-Themen 7
Z Input/Output Programm mit Swing umsetzen Java Basics - Anfänger-Themen 6
K Eclipse wie Swing per Drag und Drop erstellen Java Basics - Anfänger-Themen 2
V Dropdown Button in einer GUI (Java Swing) Java Basics - Anfänger-Themen 12
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
E Swing FileWrite?? Java Basics - Anfänger-Themen 3
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
M Swing Klasse auch per Kommandozeile starten? Java Basics - Anfänger-Themen 2
S JAVA Swing Eventlistener Java Basics - Anfänger-Themen 11
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
V Swing Componenten werden auf Mac nicht angezeigt Java Basics - Anfänger-Themen 19
J Überfordert mit Swing Java Basics - Anfänger-Themen 5
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
B Bei Swing weg vom North-West-South-East-Prinzip Java Basics - Anfänger-Themen 2
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
F Werteübergabe in Swing Formularen (gui Builder) Java Basics - Anfänger-Themen 9
L Swing GridBagLayout Java Basics - Anfänger-Themen 3
K Bild als Hintergrund in einem Swing Fenster Java Basics - Anfänger-Themen 21
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
C Swing i.V.m. Threads Java Basics - Anfänger-Themen 2
J XML Viewer for Swing Java Basics - Anfänger-Themen 6
Y Anfänger Hausaufgabe... Swing Java Basics - Anfänger-Themen 6
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
B Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
C Swing, Buttons Wert zuweisen Java Basics - Anfänger-Themen 3
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
J Java GUI in Swing und das MVC Paradigma Java Basics - Anfänger-Themen 3
M Swing Java Basics - Anfänger-Themen 7
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben