Hi, ich hab grad große Probleme mit dem CardLayout. Es tut sich in meiner Anwendung zwar etwas, aber nicht das, was ich möchte. Ich hab jetzt versucht da durchzusteigen, aber ich finde schon das Verhalten von einem kleinen Test, den ich geschrieben habe, etwas seltsam.
Im Endeffekt will ich folgendes erreichen:
Ich hab 2 Komponenten auf einem Panel mit CardLayout registriert. Irgendwie tauscht sich das erstmal nur dann aus, wenn ich die ganze Zeit per Hand irgendwelche Sizes neu berechne usw, und zweitens funzt das nur solange man das Frame nicht resized.
Nun, in meiner Demo funktioniert gar nix... Ich versteh das nicht.
Ich möchte dass wenn ich eine Karte austausche, diese Karte auch angzeigt wird, und vorallem soll sie sich der Fenstergröße anpassen. Wieso springt da kein LayoutManger o.ä. an? Ich hab schon alles mögliche versucht, von validate, revalidate, über pack und repaint etc. Irgendwie bringt das alles entweder gar nix oder nicht das gewünschte...
Hier mal meine Demo, in der sich nix tut:
Im Endeffekt will ich folgendes erreichen:
Ich hab 2 Komponenten auf einem Panel mit CardLayout registriert. Irgendwie tauscht sich das erstmal nur dann aus, wenn ich die ganze Zeit per Hand irgendwelche Sizes neu berechne usw, und zweitens funzt das nur solange man das Frame nicht resized.
Nun, in meiner Demo funktioniert gar nix... Ich versteh das nicht.
Ich möchte dass wenn ich eine Karte austausche, diese Karte auch angzeigt wird, und vorallem soll sie sich der Fenstergröße anpassen. Wieso springt da kein LayoutManger o.ä. an? Ich hab schon alles mögliche versucht, von validate, revalidate, über pack und repaint etc. Irgendwie bringt das alles entweder gar nix oder nicht das gewünschte...
Hier mal meine Demo, in der sich nix tut:
Java:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class CardProblem extends JFrame {
public static void main(String[] args) {
new CardProblem().setVisible(true);
}
public CardProblem() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
final JPanel main = new JPanel();
main.setLayout(new CardLayout());
JPanel p1 = new JPanel();
p1.setPreferredSize(new Dimension(300, 50));
p1.setBackground(Color.yellow);
JPanel p2 = new JPanel();
p2.setPreferredSize(new Dimension(300, 200));
p2.setBackground(Color.cyan);
main.add("1", p1);
main.add("2", p2);
JButton toggle = new JButton("Toggle Card");
toggle.addActionListener(new ActionListener() {
private int id = 1;
@Override
public void actionPerformed(ActionEvent e) {
CardLayout cl = (CardLayout) main.getLayout();
if (id == 1) {
cl.show(main, "1");
id = 2;
} else if (id == 2) {
cl.show(main, "2");
id = 1;
}
}
});
setLayout(new BorderLayout());
add(toggle, BorderLayout.NORTH);
add(main);
pack();
setLocationRelativeTo(null);
}
}