PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java/Swing] "Mehrseitige" JFrames?


Ganon
2005-05-14, 20:21:37
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.


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?

Senior Sanchez
2005-05-14, 20:28:46
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

Ganon
2005-05-14, 20:49:54
Kann man dort die Tab-Anzeige auch abschalten?

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

HellHorse
2005-05-14, 22:27:07
Das einfachste ist wohl CardLayout (http://java.sun.com/j2se/1.5.0/docs/api/java/awt/CardLayout.html)
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);
}
});
}
}