Suche großes vollständiges Swing GUI Beispiel nach MVC Model

Status
Nicht offen für weitere Antworten.
W

WurzelSeppel

Gast
Hallo,

ich suche ein großes vollständiges Swing-GUI Beispiel, an dem ich lernen kann, wie man richtig nach Modell-View-Controller (MVC) Vorschrift programmiert.

Das Problem ist, daß ich zwar hier viele einfach Beispiel finde zu Menus und Menubars,

aber ich weiß noch nicht genau, wie "man es richtig macht", wenn man zum Beispiel nach dem Klicken auf den ABOUT Eintrag im Menu ein einfaches About-Fenster anzeigen will....

Ok meintewegen hab ich hier die Actionabfrage, aber meistens ist sie gleich mit THIS im "Hauptprogramm" zu finden, bei den meisten Beispielen hier.

Code:
   public void actionPerformed(ActionEvent e){
      String buttonPressed = e.getActionCommand();
...

   if (buttonPressed == "About"){
          
          JFrame about = new JFrame("About");
                   
          JPanel p1 = new JPanel();
          p1.setLayout(new BorderLayout());
          about.getContentPane().add(p1);
          
         // about.setUndecorated(true);
          about.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          about.pack();
          about.setSize(640, 480);
          about.setVisible(true);
       }

So habe ich es mal probiert und gleich an Ort und Stelle einfach ein neues Fenster aufmachen wollen, wo
ein bischen was über ABOUT steht.
So klappt das nicht, so kann es nicht sein.

Genauso brauche ich ja ein Option-Fenster. Das wird ein neues JFrame sein mit einer JTabbedPane drauf, daß ist mir schon klar. Aber mir ist nicht klar, wo ich das dann aufbaue und anzeigen lasse.

Am liebsten wäre mir ein BEISPIEL. Die MVC Theorie bei Sun hab ich angelesen und immer wieder gelesen,
nützt nichts, zäh wie harter Lehm. Die komischen kurzen Codeschnipsel nützen niemand was.
Ich suche ein kompletes Beispiel, daß ich auch kompilieren kann, wo ich SEHE WAS WIE WO GEMACHT wird.

So lernt man doch am einfachsten, indem man was hat , was tut und dann daran rumspielt und was ausprobiert.
 

André Uhres

Top Contributor
Vielleicht hilft dieses MVC Beispiel mit Model, View und Controller:
Code:
package demo;
/*
 * FileTable.java
 */

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.lang.reflect.*;
import java.util.logging.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.text.*;

public final class FileTable {

    private Model model;
    private View view;
    private Controller controller;

    public FileTable() {
        super();
        model = new Model();
        view = new View();
        controller = new Controller();

    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new FileTable().view.createAndShowGUI();
            }
        });
    }

    private final class Model {

        private DefaultTableModel tableModel = new DefaultTableModel(new String[]{"File name", "Size", "Path"}, 0) {

            @Override
            public Class<?> getColumnClass(final int columnIndex) {
                return columnIndex == 1 ? Long.class : String.class;
            }
        };
        private Document textDocument = new PlainDocument();

    }

    private final class View {

        private JFrame frame;
        private JTable table;
        private JTextArea textarea;

        private void createAndShowGUI() {

            frame = new JFrame("File Table");
            table = new JTable(model.tableModel);
            textarea = new JTextArea(model.textDocument);
            JButton btChoose = new JButton(controller.chooseFolder);

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            table.getSelectionModel().addListSelectionListener(controller.selectionListener);

            Container container = frame.getContentPane();
            container.add(new JScrollPane(table), BorderLayout.CENTER);
            JScrollPane textScroller = new JScrollPane();
            textScroller.setPreferredSize(new Dimension(0, 150));
            textScroller.setViewportView(textarea);
            container.add(textScroller, BorderLayout.SOUTH);
            container.add(btChoose, BorderLayout.NORTH);

            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }

    }

    public final class Controller {

        private Action chooseFolder = new Transaction("chooseFolder", "Choose a file", null, this);
        private ListSelectionListener selectionListener = (ListSelectionListener) EventHandler.create(
                ListSelectionListener.class, this, "rowSelectionChanged", "");

        public void chooseFolder(final ActionEvent e) {
            JFileChooser chooser = new JFileChooser();
            chooser.showOpenDialog(view.frame);
            File dir = chooser.getSelectedFile();
            if (dir == null) {
                return;
            }
            dir = dir.getParentFile();
            File[] filelist = dir.listFiles();
            model.tableModel.setRowCount(0);
            for (int i = 0; i < filelist.length; i++) {
                File file = filelist[i];
                model.tableModel.addRow(new Object[]{file.getName(), file.length(), file.getAbsolutePath()});
            }
        }

        public void rowSelectionChanged(final ListSelectionEvent event) {
            if (event.getValueIsAdjusting()) {
                return;
            }
            BufferedReader reader = null;
            Document doc = model.textDocument;
            try {
                doc.remove(0, model.textDocument.getLength());
                String path = (String) model.tableModel.getValueAt(view.table.getSelectedRow(), 2);
                doc.insertString(0, path + "\n", null);
                File file = new File(path);
                reader = new BufferedReader(new FileReader(file));
                String str = reader.readLine();
                while (str != null) {
                    doc.insertString(doc.getLength(), str + "\n", null);
                    str = reader.readLine();
                }
            } catch (final IOException ex) {
                Logger.getLogger(FileTable.class.getName()).log(Level.SEVERE, null, ex);
            } catch (final BadLocationException ex) {
                Logger.getLogger(FileTable.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    reader.close();
                } catch (final IOException ex) {
                    Logger.getLogger(FileTable.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }

        class Transaction extends AbstractAction {

            private final Object controller;
            private transient Method method;

            public Transaction(final String command, final String name, final Icon icon, final Object controller) {
                super(name, icon);
                this.putValue(Action.ACTION_COMMAND_KEY, command);
                this.controller = controller;
            }

            @Override
            public void actionPerformed(final ActionEvent e) {
                try {
                    if (method == null) {
                        method = controller.getClass().getMethod(
                                (String) getValue(Action.ACTION_COMMAND_KEY), new Class[]{ActionEvent.class});
                    }
                    method.invoke(controller, new Object[]{e});
                } catch (final NoSuchMethodException ex1) {
                    throw new RuntimeException(ex1);
                } catch (final InvocationTargetException ex2) {
                    throw new RuntimeException(ex2.getTargetException());
                } catch (final Exception ex3) {
                    throw new RuntimeException(ex3);
                }
            }
        }
    }
}
 
G

Gast

Gast
Nunja, einfach zu kapieren ist das auch nicht grad. Ja, ich weiß, ich hab nach MCV gefragt und es auch bekommen.

Aber lest bitte nochmal oben mein Problem. Ich will doch nur ein About Fenster aufmachen...

Klar, später kommt noch ein "Hauptthread" dazu, aber ich hab das Gefühl, das Beispiel ist "ungeschickt" und für meine Zwecke zu "aufwendig"
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
-DD Lobby/Spielerliste aktualisieren bei Suche AWT, Swing, JavaFX & SWT 1
looparda Suche Lib für Visualisierung von Graphen AWT, Swing, JavaFX & SWT 12
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
stroggi Swing Suche nach Kurveneditor (UI-Element) AWT, Swing, JavaFX & SWT 1
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
Maks16 JavaFX ominöse Mails in meinem Suche Postfach von Outlook Sharepoint AWT, Swing, JavaFX & SWT 4
S JavaFX Suche Literatur für JavaFX Einstieg AWT, Swing, JavaFX & SWT 8
P LookAndFeel Suche Buch und Beispielprojekte für gute Designs AWT, Swing, JavaFX & SWT 4
L [SUCHE] Tutorial zur grafischen Nutzeroberflächengestaltung AWT, Swing, JavaFX & SWT 6
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
I Suche in einem Text AWT, Swing, JavaFX & SWT 4
TheWhiteShadow Swing suche passenden LayoutManager AWT, Swing, JavaFX & SWT 8
hdi LookAndFeel Suche: Substance L&F AWT, Swing, JavaFX & SWT 4
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
G DB-Suche in GUI AWT, Swing, JavaFX & SWT 4
C Live Suche mit TextFeld AWT, Swing, JavaFX & SWT 2
A Swing suche OpenSource Date(Time)Picker Komponente AWT, Swing, JavaFX & SWT 9
A LookAndFeel Suche richtige Technologie für eine bestimme Desginvorlage AWT, Swing, JavaFX & SWT 5
N LayoutManager suche LayoutManager für Tabellenstruktur AWT, Swing, JavaFX & SWT 2
A Suche: Eclipse-GUI-Layout AWT, Swing, JavaFX & SWT 5
Nicer LookAndFeel Suche noch LaFs AWT, Swing, JavaFX & SWT 7
padde479 Suche eine Komponente (->ToolBar) AWT, Swing, JavaFX & SWT 7
E Swing JTree Filter Suche mit Collapse?! AWT, Swing, JavaFX & SWT 4
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
slawaweis Suche TagCloud Komponente für Swing AWT, Swing, JavaFX & SWT 10
hdi SWT Suche passenden LayoutManager AWT, Swing, JavaFX & SWT 5
Nicer LookAndFeel Suche LaFs AWT, Swing, JavaFX & SWT 12
N Suche nach Komponente / LaF AWT, Swing, JavaFX & SWT 21
V [SUCHE]GUI Programmier Tutorial[Netbeans] AWT, Swing, JavaFX & SWT 8
M Suche passende Chart Library LGPL/kommerziell AWT, Swing, JavaFX & SWT 14
E Swing Suche LayoutManager AWT, Swing, JavaFX & SWT 5
hdi Swing Suche nach passendem Layout AWT, Swing, JavaFX & SWT 8
P Suche freien Date und Time Picker AWT, Swing, JavaFX & SWT 3
hdi Swing Suche passende API Klasse(n) für meine Komponente AWT, Swing, JavaFX & SWT 8
ModellbahnerTT Suche bessere Methode AWT, Swing, JavaFX & SWT 4
M Suche Java Komponente AWT, Swing, JavaFX & SWT 2
newcron Suche die hässlichsten Swing GUIs AWT, Swing, JavaFX & SWT 4
A Suche TreeTable-Komponente AWT, Swing, JavaFX & SWT 12
C Suche fertigen HTML editor AWT, Swing, JavaFX & SWT 2
V Suche "Einblendeffekt" AWT, Swing, JavaFX & SWT 6
V Suche Komponente AWT, Swing, JavaFX & SWT 2
hdi JTable -> Suche passenden Listener AWT, Swing, JavaFX & SWT 10
D Suche Framework um Grafikprogramm zu schreiben. AWT, Swing, JavaFX & SWT 36
Q Suche "Ablaufplan" für Swing-Fensterwechsel? AWT, Swing, JavaFX & SWT 2
R Ich suche einen sehr simplen. AWT, Swing, JavaFX & SWT 2
A Suche analoge Uhr in Java AWT, Swing, JavaFX & SWT 9
M Jlist Eintrag mit suche selektieren AWT, Swing, JavaFX & SWT 4
G Suche 2 Componenten: Splitpane ausblenden / Stecknadel AWT, Swing, JavaFX & SWT 2
B Suche eine GUI-Komponente AWT, Swing, JavaFX & SWT 2
G Listener Suche für F1 AWT, Swing, JavaFX & SWT 25
D Suche verticale Progressbar AWT, Swing, JavaFX & SWT 2
E Suche kostenloses Iconset für Swing (Ocean) AWT, Swing, JavaFX & SWT 4
M Suche Komponente für mehrere 100.000 Zeile Text AWT, Swing, JavaFX & SWT 3
C suche 1.3er - compatible Version von Swing-layout AWT, Swing, JavaFX & SWT 15
S Ich suche ein Darstellungselement AWT, Swing, JavaFX & SWT 2
T Suche Methode zum anzeigen eines Textteils im JPasswordfield AWT, Swing, JavaFX & SWT 2
N [Suche] JTree Widget/Library. AWT, Swing, JavaFX & SWT 2
M auf der suche nach einer komponente AWT, Swing, JavaFX & SWT 3
G suche Actionlistener der "Loslassen" eines Buttons AWT, Swing, JavaFX & SWT 5
G Suche Tutorial zum Thema jdbc/SQL/Select/JTable AWT, Swing, JavaFX & SWT 9
O Suche einfache Möglichkeit zum Speichern AWT, Swing, JavaFX & SWT 21
H Suche Quelltext für einen einfachen Animationsthread AWT, Swing, JavaFX & SWT 8
EagleEye suche Tutorial(s) für JTable AWT, Swing, JavaFX & SWT 2
G Suche einen KeyEvent für die Taste "ä" AWT, Swing, JavaFX & SWT 7
cool_brivk24 Großes Textfeld AWT, Swing, JavaFX & SWT 8
D JavaFX Leuchtendes großes Feld? AWT, Swing, JavaFX & SWT 2
N Swing sehr großes Bild skalieren AWT, Swing, JavaFX & SWT 8
S Swing [gelöst] GUI-Befehle bleiben wirkungslos, wenn danach was großes gemacht wird. AWT, Swing, JavaFX & SWT 5
S Großes Array Problem AWT, Swing, JavaFX & SWT 10
B Ein großes JTextPane komplett drucken AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben