CardLayout - Show klappt nicht

Luciferius

Mitglied
Hallo an alle,

Ich habe ein Problem mit dem CardLayout. Ich schaffe mir eine Matrix von Panels mit CardLayout, die ich in ein höheres Panel einbette. Dann lege ich wie üblich ein Panel und ein Label auf das CardLayout. Zu einem späteren Zeitpunkt möchte ich nun diese mit der show-Funktion wild aufrufen können. Es passiert jedoch nichts und mit nichts mein ich nichts. Keine Fehlermeldung, keine Reaktion, kein Garnichts. Im folgenden nur der Quellcode, jedoch nur in Ausschnitten, da der vollständige Code wohl die maximale Länge des Beitrag überschreiten würde:

Java:
class Frame1 extends JFrame{
	
	private JPanel[][] panels;
	private JLabel[][] values;
	private JPanel[][] candidatePanels;
	private CardLayout cl;
	private GridBagLayout gbl;
	private final String val ="Value";
	
	[...]

	private JPanel newSudokuPanel() {
		cl = new CardLayout();						
		gbl = new GridBagLayout();					
		[...]
	}

	[...]

	private void getPanels() {
		panels = new JPanel[9][9];						
		Dimension d = new Dimension(50,50);				
		for(int i=0;i<9;i++)
			for(int j=0;j<9;j++){
				panels[i][j]=new JPanel(cl);
				panels[i][j].setPreferredSize(d);
				panels[i][j].setBorder(new LineBorder(Color.black));
			}
		
		values = new JLabel[9][9];
		
		candidatePanels = new JPanel[9][9];
		for(int i=0;i<9;i++)
			for(int j=0;j<9;j++){
				candidatePanels[i][j]=new JPanel(gbl);						
				candidatePanels[i][j].setBackground(Color.white);
			}
		
		[...]
	}

	[...]
	
	public void fillWithSudoku(int[][] sudoku){
		for(int i=0;i<sudoku.length;i++)
			for(int j=0;j<sudoku.length;j++){
				if(sudoku[i][j]!=0){
					makeStaticField(i,j,sudoku[i][j]);
					continue;
				}
				makedynamicField(i,j);
			}
	}
	
	private void makedynamicField(int y, int x) {
		panels[y][x].addMouseListener((MouseListener) al);
		panels[y][x].addFocusListener((FocusListener) al);
		panels[y][x].addKeyListener((KeyListener) al);
		panels[y][x].setBackground(Color.white);
		values[y][x] = new JLabel("",JLabel.CENTER);
		values[y][x].setFont(new Font("test",Font.BOLD,25));
		values[y][x].setForeground(Color.blue);
		panels[y][x].add(candidatePanels[y][x],"Candidate");
		panels[y][x].add(val,values[y][x]);
		cl.show(panels[0][1],"Value");
	}

	private void makeStaticField(int y, int x, int k) {
		JLabel staticField = new JLabel(String.valueOf(k),JLabel.CENTER);
		staticField.setFont(new Font("test",Font.BOLD,25));
		panels[y][x].add(staticField,"Value");
	}
	
	public void changeVC(JPanel panel){
		System.out.println("as");
		for(int i=0;i<9;i++)
			for(int j=0;j<9;j++)
				if(panel.equals(panels[i][j])){
 //an dieser Stelle passiert nichts:
					cl.show(panels[i][j],"");
					System.out.println("jaaaaaaa");
				}
	}

	[...]
}
 

Luciferius

Mitglied
Es tritt ein ähnlicher Fehler auf. Hier erstmal der KSKB:
Java:
import java.awt.*;

import javax.swing.*;
import javax.swing.border.LineBorder;

class KSKB extends JFrame{
	private JPanel mainPanel;
	private GridBagLayout gbl;
	private CardLayout cl;
	private JPanel[][] panels;
	private JLabel[][] values;
	private JPanel[][] candidatePanels;
	
	public KSKB(){
		gbl=new GridBagLayout();
		cl=new CardLayout();
		mainPanel = new JPanel(gbl);
		this.setContentPane(mainPanel);
		this.setSize(400,400);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);		
		panels = new JPanel[9][9];
		values = new JLabel[9][9];
		candidatePanels = new JPanel[9][9];
		
		for(int i=0;i<9;i++)
			for(int j=0;j<9;j++){
				panels[i][j]=new JPanel(cl);
				panels[i][j].setBorder(new LineBorder(Color.black));
				
				values[i][j]=new JLabel("");							
				values[i][j].setBackground(Color.white);
				values[i][j].setOpaque(true);
				panels[i][j].add(values[i][j],"Values");
				
				candidatePanels[i][j]=new JPanel(gbl);							
				panels[i][j].add(candidatePanels[i][j],"Candidate");
				
				addComponent(mainPanel,gbl,panels[i][j],i,j,1,1,1.0,1.0);
			}
		//Hier der fehlerhafte Code
		cl.show(panels[0][1], "Candidate");
	}
	
	public static void main(String...args){
		KSKB kskb = new KSKB();
		kskb.setVisible(true);
	}
	
	static void addComponent(Container cont,GridBagLayout gbl,Component c,int x, int y,
			 int width, int height,double weightx, double weighty ){ 
		GridBagConstraints gbc = new GridBagConstraints(); 
		gbc.fill = GridBagConstraints.BOTH; 
		gbc.gridx = x; gbc.gridy = y; 
		gbc.gridwidth = width; gbc.gridheight = height; 
		gbc.weightx = weightx; gbc.weighty = weighty; 
		gbl.setConstraints( c, gbc ); 
		cont.add( c ); 
	} 
}

Egal was ich als werte bei panels[x][y] einsetzte es ändern sich nur panels[8][8] auf die contentPanels
 
Zuletzt bearbeitet:
G

Gast2

Gast
Ich würde noch ein par Listen und Maps einbauen, dass es auch schön kompliziert wird ;)...
Wie wärs wennd u es ersteinmal mit einem JPanel und CardLayout versuchst???
Du kannst nicht 10 JPanels immer die gleiche Instanz von dem CardLayout geben. Ich versteh gar net was du vor hast...

1 CardPanel kann n cards aufnehmen fertig.
 

Luciferius

Mitglied
Das ganze soll ein Sudoku werden, wo man die Zahlen eintragen kann (in die Labels), aber auch Kandidaten (die JPanels). Zwischen beiden muss ich natürlich wechseln können und die Daten im Endeffekt auch auswerten können, daher ist alles in einer Matrix gespeichert. Ich find es einfach elegant, dass ganze mit einem Cardlayout zu lösen, statt mit einem JLabel immer irgendwie die Schriftgrößen und Anordnungen rumzumogeln. Was meinst du mit den gleichen Instanzen bei CardLayout? Wenn du damit den "Erkennungsstring" meinst, wieso muss ich dann bei show() überhaupt den Parent-Container angeben, wenn das Layout mit gleichen "Erkennungsstrings" gar nicht klarkommt?
 

André Uhres

Top Contributor
Hallo Luciferius,

wie SirWayne schon sagte, legst du nur ein einziges CardLayout an:
Java:
cl=new CardLayout();
Dieses benutzt du dann für alle 81 Panels:
Java:
panels[i][j]=new JPanel(cl);
Es ist daher normal, dass nur das letzte Panel reagiert.

Bei 81 Panels mit Cardlayout müssen wir für jedes einzelne Panel ein neues CardLayout erzeugen (also jeweils mit "new CardLayout()" ).

Gruß,
André

Java:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

class KSKB extends JFrame {

    private JPanel mainPanel;
    private GridBagLayout gbl;
    private JPanel[][] panels;
    private JLabel[][] values;
    private JPanel[][] candidatePanels;

    public KSKB() {
        gbl = new GridBagLayout();
        mainPanel = new JPanel(gbl);
        this.setContentPane(mainPanel);
        this.setSize(400, 400);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        panels = new JPanel[9][9];
        values = new JLabel[9][9];
        candidatePanels = new JPanel[9][9];

        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                panels[i][j] = new JPanel(new CardLayout());
                panels[i][j].setBorder(new LineBorder(Color.black));

                values[i][j] = new JLabel("");
                values[i][j].setBackground(Color.white);
                values[i][j].setOpaque(true);
                panels[i][j].add(values[i][j], "Values");

                candidatePanels[i][j] = new JPanel(gbl);
                candidatePanels[i][j].add(new JLabel(i + "," + j));
                panels[i][j].add(candidatePanels[i][j], "Candidate");

                addComponent(mainPanel, gbl, panels[i][j], i, j, 1, 1, 1.0, 1.0);
            }
        }
        CardLayout cl = (CardLayout) panels[0][1].getLayout();
        cl.show(panels[0][1], "Candidate");
    }

    public static void main(String... args) {
        KSKB kskb = new KSKB();
        kskb.setVisible(true);
    }

    static void addComponent(Container cont, GridBagLayout gbl, Component c, int x, int y,
            int width, int height, double weightx, double weighty) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbl.setConstraints(c, gbc);
        cont.add(c);
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F CardLayout.show() funktioniert teilweise nicht AWT, Swing, JavaFX & SWT 5
F CardLayout.show() -> NullPointerException AWT, Swing, JavaFX & SWT 4
I Von Menü: Seite zu Seite springen (CardLayout) AWT, Swing, JavaFX & SWT 8
H CardLayout beschränken AWT, Swing, JavaFX & SWT 2
P CardLayout funktioniert fehlerhaft AWT, Swing, JavaFX & SWT 13
L Java- CardLayout AWT, Swing, JavaFX & SWT 10
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
J CardLayout AWT, Swing, JavaFX & SWT 3
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
padde479 LayoutManager CardLayout wechselt die Karten nicht AWT, Swing, JavaFX & SWT 5
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
F Swing Cardlayout aufräumen AWT, Swing, JavaFX & SWT 4
U CardLayout im Applet AWT, Swing, JavaFX & SWT 4
Q CardLayout und Klassenmethodenzugriff AWT, Swing, JavaFX & SWT 11
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
C CardLayout in BorderLayout? AWT, Swing, JavaFX & SWT 36
W Swing Probleme mit CardLayout AWT, Swing, JavaFX & SWT 28
D JMenuBar - CardLayout (Klasse anzeigen) AWT, Swing, JavaFX & SWT 3
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
S LayoutManager Card des CardLayout mit MenuItem auswaehlen AWT, Swing, JavaFX & SWT 9
B RootPane bzw CardLayout Transparent machen AWT, Swing, JavaFX & SWT 7
D Richtige implimentierung eines CardLayout AWT, Swing, JavaFX & SWT 3
P CardLayout - Anzeigeproblem AWT, Swing, JavaFX & SWT 2
I LayoutManager CardLayout mit anonymen Components AWT, Swing, JavaFX & SWT 4
Private Void LayoutManager Cardwechsel im CardLayout auch von Card aus? AWT, Swing, JavaFX & SWT 6
E LayoutManager Erster Versuch mit Cardlayout AWT, Swing, JavaFX & SWT 2
hdi LayoutManager Problem mit CardLayout AWT, Swing, JavaFX & SWT 11
C Problem mit CardLayout :( AWT, Swing, JavaFX & SWT 10
Dragonfire Swing CardLayout Maximum Size AWT, Swing, JavaFX & SWT 7
klattiator CardLayout - Cards auf Existenz prüfen AWT, Swing, JavaFX & SWT 3
S Frage/Problem CardLayout AWT, Swing, JavaFX & SWT 2
H CardLayout - Card erstellen hinzufügen usw. bis MI (12.3.) AWT, Swing, JavaFX & SWT 2
G CARDLAYOUT AWT, Swing, JavaFX & SWT 2
D GroupLayout an un plötzlich is CardLayout Funktion tot? AWT, Swing, JavaFX & SWT 10
J CardLayout AWT, Swing, JavaFX & SWT 10
J CardLayout AWT, Swing, JavaFX & SWT 2
J Hilfe CardLayout AWT, Swing, JavaFX & SWT 3
H Cardlayout AWT, Swing, JavaFX & SWT 3
M CardLayout: Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Dialogfenster wird nicht aktualisiert/CardLayout AWT, Swing, JavaFX & SWT 6
m@nu StackOverflowError mit CardLayout? AWT, Swing, JavaFX & SWT 2
R CardLayout bei einem Quiz AWT, Swing, JavaFX & SWT 9
J Designfehler beim CardLayout() AWT, Swing, JavaFX & SWT 4
S Registerkarte mit CardLayout (AWT) erstellen ? AWT, Swing, JavaFX & SWT 6
D CardLayout Plus ? AWT, Swing, JavaFX & SWT 4
T CardLayout Ohne Cards/Reiter AWT, Swing, JavaFX & SWT 2
J Swing Neuen Command für "show"? AWT, Swing, JavaFX & SWT 2
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
D NachoCalendar - Show Tasks AWT, Swing, JavaFX & SWT 2
R Show/Hide eines JPanels mit TitledBorder. AWT, Swing, JavaFX & SWT 11
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
L JavaFX .fxml laden klappt nicht AWT, Swing, JavaFX & SWT 16
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
M JavaFX javafx mousedragged klappt nicht AWT, Swing, JavaFX & SWT 2
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
Thallius Automatisches Scrollen zum aktiven JTextView klappt nicht AWT, Swing, JavaFX & SWT 2
M Update überschreiben klappt nicht AWT, Swing, JavaFX & SWT 4
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
X JTextField Ausgabe klappt nicht AWT, Swing, JavaFX & SWT 4
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
B JScrollPane Horizontal klappt nicht. AWT, Swing, JavaFX & SWT 4
C Button Größe einstellen klappt nicht (setBounds) AWT, Swing, JavaFX & SWT 8
S AWT Skalieren von Polygon über Area klappt nicht AWT, Swing, JavaFX & SWT 4
C Daten aus DB -> JTable aktualisieren klappt nicht AWT, Swing, JavaFX & SWT 16
L Applet In HTML einbinden klappt einfach nicht AWT, Swing, JavaFX & SWT 5
H Sound abspielen klappt nicht AWT, Swing, JavaFX & SWT 4
P Swing JLabel Text nach Links ausrichten klappt nicht AWT, Swing, JavaFX & SWT 3
S Tastatur-Shortcut klappt nicht AWT, Swing, JavaFX & SWT 17
M Liste mittels SwingWorker füllen klappt nicht AWT, Swing, JavaFX & SWT 10
F JDialog per Button schliessen - klappt nicht AWT, Swing, JavaFX & SWT 4
K AWT Rectangle klappt nicht AWT, Swing, JavaFX & SWT 7
L ArrayList Wert löschen klappt nicht AWT, Swing, JavaFX & SWT 11
Z DeleteRow klappt nicht AWT, Swing, JavaFX & SWT 11
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
P ScrollPane klappt zusammen beim verkleinern des Frames AWT, Swing, JavaFX & SWT 2
calzone Swing JTable, Werte aktualisieren klappt nicht! AWT, Swing, JavaFX & SWT 7
Y JComboBox klappt nicht auf AWT, Swing, JavaFX & SWT 3
B JButton setPreferredSize() klappt nicht AWT, Swing, JavaFX & SWT 6
B Buttongröße ändern klappt nicht AWT, Swing, JavaFX & SWT 3
G JTable - prepareRenderer() überschreiben klappt nicht AWT, Swing, JavaFX & SWT 2
mabe83 Swing: jTableCellRenderer -> Klappt nur bei String-Spalte AWT, Swing, JavaFX & SWT 2
A Menuaufruf -> panel.removeAll(); klappt nicht? AWT, Swing, JavaFX & SWT 7
C JTree.setSelectionPath() klappt nicht AWT, Swing, JavaFX & SWT 4
J JCombobox in JTable klappt beim ersten Tastendruck zu AWT, Swing, JavaFX & SWT 3
B Textfeld, Rollbaken: Eingabe klappt nicht AWT, Swing, JavaFX & SWT 2
M JFrame im Vollbildmodus öffnen klappt nicht so ganz AWT, Swing, JavaFX & SWT 2
M Beschränkung auf Nur-Zahleneingabe in Textfield klappt nicht AWT, Swing, JavaFX & SWT 3
P createImage(int, int) klappt irgendwie nicht. AWT, Swing, JavaFX & SWT 11
I JScrollPane klappt nicht. Wer weiß Rat? AWT, Swing, JavaFX & SWT 12
K g.DrawImage unter paintComponent klappt nur beim 1. Aufruf AWT, Swing, JavaFX & SWT 3
P JTable aktuallisieren nach Löschvorgang klappt nicht. AWT, Swing, JavaFX & SWT 3
S html in jTextPane klappt teilweise und teilweise nicht AWT, Swing, JavaFX & SWT 6
M Eigen gemaltes JPanel im ScrollPane. klappt nicht. :-( AWT, Swing, JavaFX & SWT 10
B setExtendedState klappt net unter linux AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben