JPanel

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Moin,

auf einem größeren Panel plaziere ich ein kleineres Panel auf dem sich ein TextFeld befindet, Wenn ich mein Programm starte, ist zwar das kleine Panel auf dem großen Panel zu sehen aber erst wenn ich mit der Maus auf das kleine Panel klicke, ist das TextFeld auf dem kleinen Panel zu sehen,

Was muss ich da noch machen, damit gleich das TextFeld auf dem kleinen Panel zu sehen ist?
 
setVisible erst dann aufrufen, wenn alles geadded wurde. Oder alternativ nachdem die GUI "steht" nochmal alles validieren.
 
hi,

ich lern selber erst seit einer Woche JAVA und Swing hab ich mir noch so gut wie gar nicht angeschaut. (JPanel ist doch ein Bestandteil von Swing, oder?)
... aber ich bild mir ein, dass ich da beim Überfliegen mal so eine pack-Funktion gesehen habe ... in Perl/Tk ist das genau die Funktion, bei der der Hund begraben liegen würde, wenn ein Textfeld nicht sichtbar ist 😀

lg, guni
 
JPanel ist Swing, und pack sorgt dafür, dass das Fenster auf genau die Größe gesetzt wird, die minimal benötigt wird, um alle Componenten darin vollständig anzuzeigen. Hat mit dem Problem also nichts zu tun.
 
nö, funkt auch nicht,

ich hab mal den Code, wo ich das JPanel erzeuge, gepostet:

Code:
GridBagLayout gbl = new GridBagLayout();
                    GridBagConstraints gbc = new GridBagConstraints();                
                    gbc.weightx = 100;
                    gbc.weighty = 100;
                    gbc.fill = GridBagConstraints.BOTH;
                    MyPanel wertPanel = new MyPanel(gbl);
                    gbl.setConstraints(wertPanel, gbc);
                    Border border1 = BorderFactory.createTitledBorder(null, "Überschrift", border.TitledBorder.LEFT, border.TitledBorder.TOP, new Font("Arial", 1, 12), Color.DARK_GRAY);                   
                    wertPanel.setBorder(border1);   
                    wertPanel.setBounds(10, 10, 100, 50);
                    wertPanel.setBackground(Color.LIGHT_GRAY);                    
                    gbc.insets = new Insets(1,1,3,7);
                    gbc.weightx = 1;
                    gbc.weighty = 120;
                    gbc.fill = GridBagConstraints.BOTH;
                    DecimalFormat df = new DecimalFormat("0");    
                    JFormattedTextField wertAnzeige = new JFormattedTextField(df);
                    wertAnzeige.setText("0,000");
                    wertAnzeige.setFont(new Font("Arial", 1, 12));		
                    wertAnzeige.setHorizontalAlignment(JTextField.RIGHT);
                    wertAnzeige.setAlignmentY(JTextField.BOTTOM);
                    wertAnzeige.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
                    wertAnzeige.setPreferredSize(new Dimension(70, 40));		
                    gbl.setConstraints(wertAnzeige, gbc);
                    JLabel einheit = new JLabel("mmWs");
                    einheit.setFont(new Font("Arial", 1, 12));                    
                    gbc.fill = GridBagConstraints.BOTH;
                    gbl.setConstraints(wertAnzeige, gbc);
                    wertPanel.add(wertAnzeige);
                    wertPanel.add(einheit);
                    view.addComponent(wertPanel);

Code:
Class View:
 public void addComponent(JComponent component) {
        component.repaint();
        panel.add(component);
        component.setVisible(true);
        panel.setVisible(true);
        mainPanel.setVisible(true);
        dragPaintPanel.setVisible(true);
        panel.repaint();
        mainPanel.repaint();
        }
 
Sooo ... jetzt zeigst du mir zuersteinmal die Stelle, wo du das Umgesetzt hast, was ich dir geschrieben habe.

Anschließend entfernst du allen unnötigen Code aus deinen Methoden.
 
Ich würd sagen, dass ich es hier umgesetzt habe:

Code:
[code]
Class View:
 public void addComponent(JComponent component) {
        component.repaint();
        panel.add(component);   // hier wird die Componente geadded und dann versuche ich, alles anzuzeigen (setVisible(true))
        component.setVisible(true);
        panel.setVisible(true);
        mainPanel.setVisible(true);
        dragPaintPanel.setVisible(true);
        panel.repaint();
        mainPanel.repaint();
        }
[/code]

und was stimmt da nicht
 
würde ich nicht sagen, dass du das hier umgesetzt hast.

1.) Die ganzen setVisible kannst du dir sparen
2.) repaint solltest du dir auch sparen können
3.) validate (zum Validieren) rufst du gar nicht auf
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben