JButtons werden nicht dargestellt

  • Themenstarter Themenstarter Roar
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
R

Roar

Gast
huhu,
hab eine klasse mit JButtons als instanzvariablen, aber wenn ich sie adde werden sie nicht dargestellt. das wär ja vielleicht ein fall für ein revalidate(), aber: wenn ich die JButtons in der methode deklariere und instantiiere geht es. bei einen Syste.out.println() der instanzvariable gibt er mir auch das richtige aus. wieso geht dat nich? hier der relevante code:

Code:
public class WelcomeDialog extends JDialog implements ActionListener {
    
    private JButton cancel = new JButton("Cancel");
    private JButton forward = new JButton("Next");
    private JButton back = new JButton("Back");
    
    private JPanel cards = new JPanel();
              
    public WelcomeDialog(JFrame owner, Dialog d) {
        super(owner, d.getTitle(), true);
        CardLayout l = new CardLayout();
        ArrayList pages = d.getPages();
        cards.setLayout(l);
        for(int i=0; i<pages.size(); i++) {
            Page p = (Page) pages.get(i);
            cards.add(createPanel(p), ""+p.getIndex());
        }
        this.add(new JLabel(d.getBanner()), BorderLayout.NORTH);
        this.add(cards, BorderLayout.CENTER);
    }
    
    private JPanel createPanel(Page page) {
         System.out.println("button: "+ cancel);
         JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
         buttons.add(cancel);
         buttons.add(new JLabel("   "));
         buttons.add(back);
         buttons.add(forward);
         buttons.setVisible(true);
         buttons.revalidate();
         JPanel p = new JPanel(new TableLayout(new double[][]{{TableLayout.FILL},{TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.FILL}}));
         p.add(new JHeader(page.getCaption(), JHeader.SIMPLE_HEADER),"0,0,f,f");
         p.add(new JLabel("<html>"+page.getText()+"</html>"), "0,1,l,t");
         p.add(buttons, "0,2,r,b");
         return p;
    }

edit: achja, is mit 1.5 Beta 1 kompiliert und ausgeführt... :-/
 
Versuche statt
Code:
  ...
  this.add(new JLabel(d.getBanner()), BorderLayout.NORTH); 
  this.add(cards, BorderLayout.CENTER); 
  ...
lieber
Code:
  ...
  getContentPane().setLayout(new BorderLayout());
  getContentPane().add(new JLabel(d.getBanner()), BorderLayout.NORTH); 
  getContentPane().add(cards, BorderLayout.CENTER); 
  ...

Gruß,
Michael
 
Noch etwas
Code:
buttons.setVisible(true); 
buttons.revalidate();
bringt nichts, da das Dialogfenster zu
diesem Zeitpunkt noch nicht sichtbar ist.
 
das 2. hab ich eh nur zum ausprobieren hinzugefügt, und ersteres ist auch egal! ich arbeite mit 1.5 wie gesagt. au0erdem hab ich geschrieben, dass die Buttons angezeigt werden wenn sie in der methode deklariert und initialisiert werden. daran liegt es also def. nicht.
 
Oh, sorry, habe das mit 1.5 nicht gesehen. :autsch:
Was anderes fällt mir nicht auf, TableLayout
habe ich auch noch nie verwendet.
Ich nutze fast immer GridBagLayout, manchmal
Flow- oder BorderLayout, wenn's schnell gehen
soll.

Gruß,
Michael
 
was hat das jetzt mit meinem problem zu tun :?
das layout spielt keine rolle 🙁

hülfe
 
Frage: werden die Buttons auf dem letzten Panel angezeigt?

Denn:
Code:
	    private JButton cancel = new JButton("Cancel");
	    private JButton forward = new JButton("Next");
	    private JButton back = new JButton("Back");

	    [...]


	    public WelcomeDialog(JFrame owner, Dialog d) {
		[...]
	        for(int i=0; i<pages.size(); i++) {
	            Page p = (Page) pages.get(i);
	            cards.add(createPanel(p), ""+p.getIndex());
	        }
		[...]
	    }
	   
	    private JPanel createPanel(Page page) {

	         JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
	         buttons.add(cancel);

	         buttons.add(back);
	         buttons.add(forward);

		[...]
	         return [...];
	    }

Du fügst immer dieselben Buttons hinzu.

Aber wenn man in einem Container nachguckt, was bei add passiert:
Code:
	 /* Reparent the component and tidy up the tree's state. */
	if (comp.parent != null) {
		comp.parent.remove(comp);

:arrow: Eine Component kann immer nur einen einzigen Parent haben.

:arrow: Mach mehrere Buttons (blöde Lösung), oder mach einfach einen zusätzlichen Balken nur für die Buttons.
 
*ugh* handvorkopfschlag* daran hab ich gar nicht gedacht 😳

danke Beni 🙂 funktioniert natürlich so.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben