view in andere View einbinden

Status
Nicht offen für weitere Antworten.
B

Benjamin

Gast
Hallo,

ich suche und probiere rum, bekomm es aber nicht hin, ein Objekt einer View in einer anderen View anzuzeigen. Einziger erfolg, es funktioniert mit einem JTabbedPane - allerdings wollte ich keine Tabs haben :-/

Code:
public class MeineView extends AbstrakteView
{

    private MeinController  controller;
    /*
     * die Views, die eingebunden werden sollen
     */
    V_test1 view_1;
    V_test2 view_2;
    V_test3 view_3;

    public V_MeineView( MeinController controller )
    {
        this.controller = controller;

        view_1 = new Test1( controller );
        controller.addView( view_1 );
        view_2 = new Test2( controller );
        controller.addView( view_2 );
        view_3 = new Test3( controller );
        controller.addView( view_3 );

        initComponents();
    }

    //...sonstiger code...

    private void b1ActionPerformed(java.awt.event.ActionEvent evt)
    {
        meinTab.removeAll();
        meinTab.add( "View Nummer Eins" , view_1 );
    }
Dieser code funktioniert, er füllt ein Tab je nachdem auf welchen Knopf ich drücke, mit einer der drei Views. genau das was ich will, allerdings hat das JTabbedPane eben dieses Tab, was ich auch nicht verstecken kann.

Am liebsten würde ich die Views in ein einfaches Panel stecken, aber alle Versuche sind fehlgeschlagen, das Panel blieb immer leer.

die Subviews sins auch alle Kinder von AbstrakteView.

Über Lösungen oder Idden jeder art würde ich mich sehr freuen, da ich mittlerweile ziemlich verzweifelt vor diesem Problem sitze.

vielen Dank,
Benjamin
 

Marco13

Top Contributor
Bin nicht ganz sicher, was du meinst, aber ... hilft dir vielleicht das CardLayout? (Das wird von der JTabbedPane verwendet - allerdings kann man es auch direkt verwenden, und dann werden eben keine "Tab-Köpfe" angezeigt...)
 
B

Benjamin

Gast
Hi,

vielen dank für die rasche Antwort. mit dem CardLayout hatte ich auch schon rumprobiert, scheinbar aber nicht genug. Nun habe ich eine Lösung gefunden:

meinPanel als Panel mit CardLayout erstellen und dann in den einzelnen Actions etwas wie

Code:
private void b1ActionPerformed(java.awt.event.ActionEvent evt)
{
    meinPanel.removeAll();
    meinPanel.add( view_1 , "" );
    meinPanel.updateUI();
}


Danke!

PS: als Gast kann ich scheinbar, dieses Thema nicht als 'erledigt' markiren - wär gut, wenn das jemend tun könnte :)
 
B

Benjamin

Gast
Ja, in den meisten Fällen erreicht man mit dem JTabbedPane(welches das CardLayout nutzt) sicher den gewünschten Effekt.
Aber in meinem Fall ging es nicht darum, Ansichten zu stapeln, außerdem wollte ich den "Tab-Kopf" des JTabbedPane nicht sehen sondern einfach View-Objekte in ein leeres Element laden um sie gegeneinander auszutauschen.

Auf diese Weise funktioniert das wunderbar, es gibt zwar sicher noch elegantere Lösungen, aber die gibt es ja immer.
 

André Uhres

Top Contributor
JTabbedPane wurde nicht gebaut um CardLayout zu nutzen, sondern um es zu ersetzen.
Wenn wir wollen, können wir JTabbedPane auch ohne Tabs verwenden, etwa so:
Code:
/*
 * JCardPane.java
 *
 * The main method shows a minimal example
 * using the arrow key bindings of JTabbedPane
 * to navigate through the cards.
 * Of course, we may add our own navigation buttons.
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicTabbedPaneUI;

public class JCardPane extends JComponent {

    private JTabbedPane pane;

    public JCardPane() {
        pane = new JTabbedPane();
        hideTabs();
        setLayout(new BorderLayout());
        add(pane);
    }

    public int first() {
        return show(0);
    }

    public int last() {
        return show(-1);
    }

    public int next() {
        return show(pane.getSelectedIndex() + 1);
    }

    public int previous() {
        return show(pane.getSelectedIndex() - 1);
    }

    public int show(final int index) {
        if (pane.getTabCount() == 0) {
            return -1;
        }
        if (index >= pane.getTabCount()) {
            pane.setSelectedIndex(0);
            return 0;

        }
        if (index < 0) {
            pane.setSelectedIndex(pane.getTabCount() - 1);
            return pane.getTabCount() - 1;

        }
        pane.setSelectedIndex(index);
        return index;
    }

    public int show(final String name) {
        int index = pane.indexOfTab(name);
        if (index >= 0) {
            pane.setSelectedIndex(index);
        }
        return index;
    }

    public int show(final JComponent card) {
        int index = pane.indexOfComponent(card);
        if (index < 0) {
            index = pane.getTabCount();
            pane.addTab(card.getName(), card);
        }
        pane.setSelectedIndex(index);
        return index;
    }

    private void hideTabs() {
        pane.setUI(new BasicTabbedPaneUI() {
            @Override
            protected int calculateTabAreaHeight(final int tabPlacement,
                    final int horizRunCount, final int maxTabHeight) {
                return 0;
            }
            @Override
            protected Insets getContentBorderInsets(final int tabPlacement) {
                return new Insets(0, 0, 0, 0);
            }
            @Override
            protected MouseListener createMouseListener() {
                return null;
            }
            @Override
            protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
                return 0;
            }
        });
    }

    //for testing only:
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {

            @Override
            public void run() {
                final JFrame f = new JFrame("Use Arrows to Navigate (right / left)");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setSize(400, 100);
                f.setLocationRelativeTo(null);
                final JCardPane cardPane = new JCardPane();
                f.add(cardPane, BorderLayout.CENTER);
                class Card extends JPanel {

                    public Card(final String name) {
                        add(new JLabel(name));
                        setName(name);
                    }
                }
                for (int i = 0; i < 5; i++) {
                    cardPane.show(new Card(String.valueOf(i + 1)));
                }
                cardPane.first();
                f.setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
J Saubere Trennung Model, View, Controller Javafx AWT, Swing, JavaFX & SWT 10
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
S JavaFX Boolean ändern Table View AWT, Swing, JavaFX & SWT 14
M Swing MVC-Pattern - View mit mehreren Models AWT, Swing, JavaFX & SWT 5
M JavaFX - Array in View auslesen AWT, Swing, JavaFX & SWT 12
4a61766120617274697374 dynamische Tree View AWT, Swing, JavaFX & SWT 2
H JavaFX Ein View vorschalten Exception AWT, Swing, JavaFX & SWT 7
M SWT View nicht mehr sichtbar AWT, Swing, JavaFX & SWT 2
G JavaFX "Framework" zur View Ersellung AWT, Swing, JavaFX & SWT 0
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
K Panels mit eigenen Controllern in Main-View einbauen AWT, Swing, JavaFX & SWT 4
T View AccessibleContext AWT, Swing, JavaFX & SWT 0
S Swing Auf Änderungen eines Models in der View einer JTable reagieren AWT, Swing, JavaFX & SWT 1
S Swing JPanel in View ersetzen AWT, Swing, JavaFX & SWT 10
O Swing JTextField Sync View -> Model AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
L View aus dem MVC ist immer die GUI? AWT, Swing, JavaFX & SWT 5
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
Rudolf Swing Baut die View die Modelebene auf oder wer? AWT, Swing, JavaFX & SWT 13
G Swing MVC / View - Controller AWT, Swing, JavaFX & SWT 7
N MVC - Logik zum Verändern der View AWT, Swing, JavaFX & SWT 8
V Eclipse View Right-Click Menu hinzufügen AWT, Swing, JavaFX & SWT 2
D Drag-Action: Innerhalb meiner View? AWT, Swing, JavaFX & SWT 3
C SWT-Elemente an View-Fenster angleichen und automatisch resizen AWT, Swing, JavaFX & SWT 3
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4
R Model View Controller Konzept AWT, Swing, JavaFX & SWT 2
R Swing Designfrage - Zusammenspiel Model / View AWT, Swing, JavaFX & SWT 10
J Swing SwingActions und das Problem auf den View bzw. das Model zuzugreifen AWT, Swing, JavaFX & SWT 2
D Swing JTable Model View Problem AWT, Swing, JavaFX & SWT 6
H shell in view implementieren; menu mit keystroke unterlegen AWT, Swing, JavaFX & SWT 8
M Swing Model an View binden AWT, Swing, JavaFX & SWT 4
M Swing Von einem Controller aus View-Elemente ändern AWT, Swing, JavaFX & SWT 11
H Swing JScrollPane mit JPanel als View AWT, Swing, JavaFX & SWT 3
B Sudokuartiger View (RadiobuttonTableView) mit JFace Viewer? AWT, Swing, JavaFX & SWT 3
N FileChooser in View AWT, Swing, JavaFX & SWT 3
F Swing J(X)Table Spalten umsortieren NUR im View (Wie finde ich eine Spalte nach Name?) AWT, Swing, JavaFX & SWT 3
hdi Swing JTable & Filtern: Daten nicht in der View AWT, Swing, JavaFX & SWT 2
B SWT Textdatei Lesen und Anzeige in View - Zeichensatzproblem AWT, Swing, JavaFX & SWT 4
D Design - View & Controller AWT, Swing, JavaFX & SWT 2
H Eclipse View / Window Layout AWT, Swing, JavaFX & SWT 3
N RCP/SWT View durch Programm auf 2. Bildschirm verschieben AWT, Swing, JavaFX & SWT 2
G RCP - SWT :: Scrollbars in einer View AWT, Swing, JavaFX & SWT 10
Zed JTable view auf Selection setzen AWT, Swing, JavaFX & SWT 2
R MVC: System.out.prinln in View umleiten geht nicht richtig AWT, Swing, JavaFX & SWT 7
K JSpinner - Model <-> View, unterschiedliche Werte AWT, Swing, JavaFX & SWT 9
E Mehrere Views in einer View AWT, Swing, JavaFX & SWT 3
TRunKX Ereignissweitergabe von Jlist.getSelected() aus der View AWT, Swing, JavaFX & SWT 7
P Verbindung View und Controller AWT, Swing, JavaFX & SWT 3
D Scrollbalken in einem View AWT, Swing, JavaFX & SWT 2
I Shell aus einer Plugin-View öffnen . AWT, Swing, JavaFX & SWT 4
B View zeichnet Daten aus dem Model ohne Update AWT, Swing, JavaFX & SWT 4
F MVC: Update von View und Controller AWT, Swing, JavaFX & SWT 5
S MVC - Neues Frame, neue View, neuer Controller? AWT, Swing, JavaFX & SWT 3
C Model View Controller - Beispielimplementation AWT, Swing, JavaFX & SWT 5
M SWT und Model View Controller? AWT, Swing, JavaFX & SWT 8
M auch JScrollPane aber mit Zoomen, wie wird der View gesetzt AWT, Swing, JavaFX & SWT 2
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
M Hough-Transformation für Kreise und andere Formen AWT, Swing, JavaFX & SWT 3
H Swing Frame an andere Klassen weitergeben AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
L TextField Eingabe in andere GUI übernehmen AWT, Swing, JavaFX & SWT 1
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
K JTable komplett durch andere ersetzen AWT, Swing, JavaFX & SWT 4
F Gui weicht von Designpreview ab (kein fensterrahmen, andere größe) AWT, Swing, JavaFX & SWT 13
kaoZ Swing JMenuBar, Preferences, Properties... und viele andere lustige Dinge (Best Practice) AWT, Swing, JavaFX & SWT 15
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
G JPanel aufrufen in andere Klasse AWT, Swing, JavaFX & SWT 2
Rudolf Swing Andere Styles für Swing? AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
W Funktion aus einer Java Datei in eine andere einbauen AWT, Swing, JavaFX & SWT 25
G Swing Value von einer JScrollBar auf eine andere übertragen AWT, Swing, JavaFX & SWT 2
J Java bild in andere Klasse importieren AWT, Swing, JavaFX & SWT 5
C Gedrückter Button in andere Klasse übergeben AWT, Swing, JavaFX & SWT 5
J Swing JTable - nach Sortieren andere Methode aufrufen AWT, Swing, JavaFX & SWT 2
M Swing JList Item in andere JList während Ausführung AWT, Swing, JavaFX & SWT 4
A Swing Externe Schriftart mitkompilieren für andere PCs? AWT, Swing, JavaFX & SWT 3
Z andere Programmfenster relativ zum eigenen maximieren AWT, Swing, JavaFX & SWT 4
N Button on click eine andere Klasse aufrufen... AWT, Swing, JavaFX & SWT 2
M Swing Eine andere Klasse über Button starten und in TextArea ausgeben AWT, Swing, JavaFX & SWT 13
L Swing Bilder über andere Bilder laden AWT, Swing, JavaFX & SWT 3
F LayoutManager GridLayout 0/0 auf andere Ecke setzen AWT, Swing, JavaFX & SWT 4
E Listener, werte in andere Klasse übernehmen AWT, Swing, JavaFX & SWT 11
P Swing Auswahl einer JComboBox für eine andere JComboBox übernehmen AWT, Swing, JavaFX & SWT 4
F JScrollPane überlagert andere Elemente AWT, Swing, JavaFX & SWT 5
R Eingegebenen Text in JOptionPane in andere Klasse weitergeben AWT, Swing, JavaFX & SWT 2
C JButton in andere Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Menübar soll bestehen bleiben, wenn andere Masken geöffnet werden AWT, Swing, JavaFX & SWT 4
D LayoutManager Main layout auf andere Class Dateien verweisen? AWT, Swing, JavaFX & SWT 17
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
W bei änderungen in JTextField andere gelich mitändern AWT, Swing, JavaFX & SWT 3
P getMousePosition(): andere Werte als erwartet AWT, Swing, JavaFX & SWT 4
D Textausgabe in jTextArea über andere Klasse AWT, Swing, JavaFX & SWT 6
K Wenn Mauszeiger in der Nähe vom Kreis, soll Kreis an eine andere Stelle springen AWT, Swing, JavaFX & SWT 8
J Swing - ich sehe keine Linie, andere schon AWT, Swing, JavaFX & SWT 6
S Andere Elemente in JComboBox anzeigen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben