Zurück   3DCenter Forum > Software-Hilfe Foren > Programmierung
Registrieren Hilfe Community Kalender Heutige Beiträge Suchen Uns unterstützen

Antwort
 
Themen-Optionen Ansicht
Alt 2005-05-14, 20:21:37   #1 (im Thread / einzeln)
Ganon
Insane Member
 
Benutzerbild von Ganon
 
Registriert: 2002-03-18
Beiträge: 15.306
[Java/Swing] "Mehrseitige" JFrames?

Hi.

Ich brauche eine Möglichkeit, in einem JFrame mehrere Inhalte anzeigen zu können.

Also z.B. auf einer Seite eine Übersicht in Form einer Tabelle und auf der anderen Seite eine Detailsicht eines Datensatzes in Form von Feldern.

Da ich nicht direkt was dazu finden konnte, habe ich halt selbst mal "rumprobiert". Mein Test funktioniert auch erst mal so, aber ich wollte fragen, ob das so i.O. ist, oder ob ich ganz schwer was falsch mache?

Hier das Beispiel. Beim Klick auf den Schalter wechselt er jeweils die Seite.

Code:
package paradoxPorter;

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

public class GUI extends JFrame implements ActionListener {

	private static final long serialVersionUID = 3257005449487529271L;
	
	JLayeredPane pag1 = new JLayeredPane();
	JLayeredPane pag2 = new JLayeredPane();
	
	public void togglePag() {
		if(pag1.isVisible()) {
			pag1.setVisible(false);
			pag2.setVisible(true);
		}
		else {
			pag2.setVisible(false);
			pag1.setVisible(true);
		}
	}

	public GUI() throws HeadlessException {
		super("Paradox-Porter");
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

		pag1 = this.getLayeredPane();
		pag1.setLayout(null);
		pag1.setSize(640,480);
		pag1.setVisible(true);

		JButton cmd1 = new JButton("Hallo");
		cmd1.setBounds(200,200,100,100);
		cmd1.addActionListener(this);
		pag1.add(cmd1);
		
		pag2 = new JLayeredPane();
		pag2.setLayout(null);
		pag2.setSize(640,480);
		pag2.setVisible(false);

		JButton cmd2 = new JButton("Du");
		cmd2.setBounds(200,200,100,100);
		cmd2.addActionListener(this);
		pag2.add(cmd2);		
		
		this.getRootPane().add(pag2);		
	}
	public void actionPerformed(ActionEvent e) {
		this.togglePag();
	}
}
Kann man das so machen, oder erstelle ich die falschen Panes? Oder sollte ich es anders machen?

Für auftretende Fehler haftet die Tastatur!
Lenovo IdeaPad 5 Pro Gen 6 | Ryzen 5800H @ 3.20 GHz | 16 GB RAM
Ryzen 9950X3D | 96GB DDR5-6000 | PowerColor Red Devil RX 9070XT
ASUS ROG Ally (2023)
Ganon ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2005-05-14, 20:28:46   #2 (im Thread / einzeln)
Senior Sanchez
Master Member
 
Benutzerbild von Senior Sanchez
 
Registriert: 2004-04-07
Beiträge: 8.960
Re: [Java/Swing] "Mehrseitige" JFrames?

Wieso nimmste net einfach ne JTabbedPane? Dann haste sone schnieken Reiter und genau für dein Anwendungsgebiet ist das doch gedacht.

Also ne JTabbedPane in nen JFrame packen und dann für die einzelnen "Seiten" Tabs hinzufügen.


mfg Senior Sanchez
Senior Sanchez ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2005-05-14, 20:49:54   #3 (im Thread / einzeln)
Ganon
Insane Member
Threadstarter
 
Benutzerbild von Ganon
 
Registriert: 2002-03-18
Beiträge: 15.306
Re: [Java/Swing] "Mehrseitige" JFrames?

Kann man dort die Tab-Anzeige auch abschalten?

Also das oben nicht solche Reiter sind und man nur per Quellcode umschalten kann?

Für auftretende Fehler haftet die Tastatur!
Lenovo IdeaPad 5 Pro Gen 6 | Ryzen 5800H @ 3.20 GHz | 16 GB RAM
Ryzen 9950X3D | 96GB DDR5-6000 | PowerColor Red Devil RX 9070XT
ASUS ROG Ally (2023)
Ganon ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2005-05-14, 22:27:07   #4 (im Thread / einzeln)
HellHorse
Admiral Member
 
Benutzerbild von HellHorse
 
Registriert: 2003-03-27
Beiträge: 3.357
Re: [Java/Swing] "Mehrseitige" JFrames?

Das einfachste ist wohl CardLayout
Code:
package gui.ganon;

import java.awt.CardLayout;
import java.awt.Container;
import java.awt.Frame;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

import static javax.swing.SwingUtilities.invokeLater;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;

public class MultiPageFrame extends JFrame {
    
    protected CardLayout layout;
    
    private static String[] KEYS = new String[] {"eins" , "zwei", "drei"};
    
    public MultiPageFrame() {
        super("MultiPageFrame");
        this.layout = new CardLayout();
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLayout(this.layout);
        JComponent contentPane = (JComponent) this.getContentPane();
        contentPane.setLayout(this.layout);
        contentPane.setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
        this.createContent();
        this.pack();
    }
    
    private void createContent() {
        JMenu menu = new JMenu("File");
        for (String each : KEYS) {
            JButton button = new JButton(each);
            this.add(button, each);
            System.out.println(each);
            menu.add(new ShowAction(each));            
        }
        JMenuBar bar = new JMenuBar();
        bar.add(menu);
        this.setJMenuBar(bar);
    }
    
    protected class ShowAction extends AbstractAction {
        private String key;
        
        protected ShowAction(String key) {            
            super(key);
            this.key = key;
        }
        
        public void actionPerformed(ActionEvent e) {
            MultiPageFrame.this.layout.show(MultiPageFrame.this.getContentPane(), this.key);
        }
        
    }
    
    public static void main(String[] args) {
        System.setProperty("swing.aatext", "true");
        invokeLater(new Runnable() {
            public void run() {
                Frame frame = new MultiPageFrame();
                frame.setVisible(true);
            }
        });
    }
}

Zitat:
.. and it’s not “oh just thread your application”. Anyone that says that is basically an idiot, not appreciating the problems.
HellHorse ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Antwort

Lesezeichen
  • Dieses Thema bei Twitter speichern
  • Dieses Thema bei Facebook speichern


Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:36:05 Uhr.


Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.