Positionierungsprobleme beim GridBagLayout

Grüße an alle, habe ein kleines Problem mit GridBagLayout : Eigentlich will ich nur, dass die JLabel müLabel und müAktuell ungefähr in der Mitte des Applets angezeigt werden und direkt aneinander grenzen. Zudem sollen die JLabel sigmaQuadrat und sigmaAktuell weiter unten parallel zu den müLanels angezeigt werden, genauer : Das rechte Ende der Schrift von müLabel soll direkt über dem rechten Ende der Schrift von sigmaQuadrat stehen. sigmaAktuell soll links genauso an sigmaQuadrat grenzen wie müAktuell an müLabel. Leider kriege ich das einfach nicht hin, hab schon alles Mögliche probiert (gridX, ipadX, weightX … ).
Kann mir da jemand weiter helfen ? Wäre echt dankbar.

Java:
public class ErwartungswertUndVarianz extends JApplet
{ //Eigentlich nicht so wichtig für die Frage, das Wichtige steht in init() unten
    public Dimension appSize;
    public int appWidth;
    public int appHeight;

    public double mü = 0;
    public double varianz = 1;

    public final double müMax = 3;
    public final double varianzMax = 3;
    public final double varianzMin = 1;

    public final double pMax = 0.4;//größter dargestellter p-Wert
    public final double zMax = 3;//größter dargestellter z-Wert

    public final int pTeilung = 10;//Anzahl der Unterteilungen der p-Achse
    public final int zTeilung = 10;//Anteil der Unterteilungen der z-Achse

    public final int AbstandZLabelsGitter = 20;
    public final int AbstandGitterRechts = 30;

    public final int graphSchrittweite = 10;

    public int müLabelNumber;//Position der müAnzeige im Contenpane
    public int varianzLabelNumber;//Position der varianzAnzeige im Contenpane
    public int koordinatensystemNumber;//Position des Koordinatensystems in der Contentpane

    public int gitterWidth;
    public final int reglerHeight = 30;
    public final int AbstandMüLabelMüAnzeige = 100;
    public final int müLabelHeight = 40;

/*Für meine Frage ist eigentlich nur init() interessant, poste der Vollständigkeit halber aber den ganzen Code*/
    @Override
    public void init()
    {
        setSize(new Dimension(600, 600));
        getContentPane().setBackground(Color.CYAN);
        setLayout(new GridBagLayout());

        appWidth = getWidth();
        appHeight = getHeight();

        //Koordinatensystem zum Zeichnen des Graphen hinzufügen
        GridBagConstraints x0y0 = new GridBagConstraints();
        x0y0.gridx = 0;
        x0y0.gridy = 0;
        x0y0.gridwidth = 2;
        x0y0.anchor = GridBagConstraints.NORTH;
        Koordinatensystem koord = new Koordinatensystem();
        koordinatensystemNumber = this.getContentPane().getComponentCount();
        add(koord, x0y0);

        //mü-Label hinzufügen
        GridBagConstraints x0y1 = new GridBagConstraints();
        x0y1.gridx = 0;
        x0y1.gridy = 1;
        JLabel müLabel = new JLabel("Erwartungswert \u03BC : ");
        müLabel.setBackground(Color.GREEN);
        müLabel.setOpaque(true);
        add(müLabel, x0y1);

        //Anzeige für aktuellen mü-Wert hinzufügen
        GridBagConstraints x1y1 = new GridBagConstraints();
        x1y1.gridx = 1;
        x1y1.gridy = 1;
        x1y1.anchor = GridBagConstraints.WEST;
        JLabel müAktuell = new JLabel();
        müAktuell.setBackground(Color.RED);
        müAktuell.setOpaque(true);
        müLabelNumber = getContentPane().getComponentCount();
        add(müAktuell, x1y1);
        setMü(0);
        
        //Schieberegler zum Verstellen von mü hinzufügen
        GridBagConstraints x0y2= new GridBagConstraints();
        x0y2.gridx = 0;
        x0y2.gridy = 2;
        JSlider müRegler = new JSlider((int)(- müMax * 10), (int)(müMax * 10), 0);
        müRegler.setPreferredSize(new Dimension(gitterWidth, reglerHeight));
        müRegler.setMajorTickSpacing(3);
        müRegler.setPaintTicks(true);
        müRegler.addChangeListener(new MüListener());
        add(müRegler, x0y2);

        //Varianz-Label hinzufügen
        GridBagConstraints x0y3 = new GridBagConstraints();
        x0y3.gridx = 0;
        x0y3.gridy = 3;
        JLabel sigmaQuadrat = new JLabel("Varianz \u03C3\u00B2 : ");
        add(sigmaQuadrat, x0y3);

        //Anzeige für aktuelle Varianz hinzugügen
        GridBagConstraints x1y3 = new GridBagConstraints();
        x1y3.gridx = 1;
        x1y3.gridy = 3;
        JLabel sigmaAktuell = new JLabel();
        varianzLabelNumber = getContentPane().getComponentCount();
        add(sigmaAktuell, x1y3);
        setVarianz(1);

        //Schieberegler zum Verstellen von Varianz
        GridBagConstraints x0y4 = new GridBagConstraints();
        x0y4.gridx = 0;
        x0y4.gridy = 4;
        JSlider varianzRegler = new JSlider((int)(varianzMin*10), (int)(varianzMax * 10), (int)(varianzMin*10));
        varianzRegler.setPreferredSize(new Dimension((gitterWidth*3)/4, reglerHeight));
        varianzRegler.setMajorTickSpacing(1);
        varianzRegler.setPaintTicks(true);
        varianzRegler.addChangeListener(new VarianzListener());
        add(varianzRegler, x0y4);
    }

    public void setMü(double mü)
    {
        this.mü = mü;
        aktualisiereMüAnzeige();
        repaint();
    }

    public void setVarianz(double varianz)
    {
        this.varianz = varianz;
        aktualisiereVarianzAnzeige();
        repaint();
    }

    public void aktualisiereMüAnzeige()
    {
        DecimalFormat form = new DecimalFormat("'  '0.0;-0.0");
        String müAnzeigeNeu = form.format(mü);
        ((JLabel)(getContentPane().getComponent(müLabelNumber))).setText(müAnzeigeNeu);

    }

    public void aktualisiereVarianzAnzeige()
    {
        DecimalFormat form = new DecimalFormat("'  '0.0");
        String varianzAnzeigeNeu = form.format(varianz);
        ((JLabel)getContentPane().getComponent(varianzLabelNumber)).setText(varianzAnzeigeNeu);
    }

    public double dichteFunktion(double x)
    {
        return
                Math.exp(- Math.pow(x - mü, 2) / (2 * varianz))
                / Math.sqrt(2 * Math.PI * varianz);
    }

    public class Koordinatensystem extends JPanel
    {
        int gitterHeight;
        //int gitterWidth;

        int pGitterSchrittweite;
        int zGitterSchrittweite;

        int graphPunkte;

        public Koordinatensystem()
        {
            setBackground(Color.WHITE);
            setPreferredSize(new Dimension(appWidth, appHeight*3/4));

            gitterHeight = getPreferredSize().height - AbstandZLabelsGitter;
            gitterWidth = getPreferredSize().width - AbstandGitterRechts;

            pGitterSchrittweite = gitterHeight / pTeilung;
            zGitterSchrittweite = gitterWidth / zTeilung;

            graphPunkte = gitterWidth / graphSchrittweite;

            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

            add(new Graph(this));
            getComponent(0).setBounds(0, 0, gitterWidth, gitterHeight);
        }

        @Override
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);

            g.setColor(Color.GRAY);

            //Zeichne horizontale Gitter-Linien
            for(int i = 0; i <= pTeilung; i++)
                g.drawLine(0, i * pGitterSchrittweite, gitterWidth, i * pGitterSchrittweite);

            //Zeichne vertikale Gitter-Linien
            for(int i = 0; i <= zTeilung; i++)
                g.drawLine(i * zGitterSchrittweite, 0, i * zGitterSchrittweite, gitterHeight);
            
            //Zeichne z-Achsen-Beschriftung
            g.setColor(Color.BLACK);
            double zAchsenWertSchrittweite = 2 * zMax / zTeilung;
            DecimalFormat format = new DecimalFormat("0.0");
            for(int i = 0; i <= zTeilung; i++)
                g.drawString(format.format(i*zAchsenWertSchrittweite - zMax), i*zGitterSchrittweite, gitterHeight + AbstandZLabelsGitter);

            g.drawLine(0, gitterHeight, gitterWidth, gitterHeight);

            //zeichne z-Achsenbeschriftung
            DecimalFormat form = new DecimalFormat("0.00");
            double pSchrittweite = pMax / pTeilung;
            for(int p = 0; p <= pTeilung; p++)
                g.drawString(form.format(pMax-p*pSchrittweite),gitterWidth/2 , p*pGitterSchrittweite);

            g.drawLine(gitterWidth/2, 0, gitterWidth/2, gitterHeight);
        }

        public class Graph extends JPanel
        {
            int[] xPos;
            double[] zWerte;

            public Graph(Koordinatensystem koord)
            {
                setPreferredSize(koord.getPreferredSize());
                setOpaque(false);

                xPos = new int[graphPunkte + 1];
                for(int i = 0; i <= graphPunkte; i++)
                    xPos[i] = i * graphSchrittweite;

                zWerte = new double[graphPunkte + 1];
                double zSchrittweite = 2 * zMax / graphPunkte;
                for(int i = 0; i <= graphPunkte; i++)
                    zWerte[i] = i * zSchrittweite - zMax;
            }

            @Override
            public void paintComponent(Graphics g)
            {
                super.paintComponent(g);

                int[] yPos = new int[graphPunkte + 1];
                double pInY = gitterHeight / pMax;
                for(int i = 0; i <= graphPunkte; i++)
                {
                    int yWert = (int)(gitterHeight - dichteFunktion(zWerte[i]) * pInY);
                    if(yWert > pGitterSchrittweite * pTeilung)//Korrektur von Rundungsfehlern
                        yWert = pGitterSchrittweite * pTeilung;
                    yPos[i] = yWert;
                }

                g.setColor(Color.BLUE);
                g.drawPolyline(xPos, yPos, graphPunkte+1);
            }
        }
    }

    public class MüListener implements ChangeListener
    {
        public void stateChanged(ChangeEvent e)
        {
            double müNeu = ((JSlider)(e.getSource())).getValue();
            müNeu /= 10;
            setMü(müNeu);
        }
    }

        public class VarianzListener implements ChangeListener
    {
        public void stateChanged(ChangeEvent e)
        {
            double varianzNeu = ((JSlider)(e.getSource())).getValue();
            varianzNeu /= 10;
            setVarianz(varianzNeu);
        }
    }

}
 

KrokoDiehl

Top Contributor
In solchen Fällen helfen Skizzen meistens mehr als eine textuelle Beschreibung, aber ich versuche mich mal:

a) Andere Idee: wenn deine vier Komponenten alle gleich groß sein sollen und in einem festen Raster ausgerichtet, dann ist ein GridLayout (nicht GridBagLayout) wesentlich einfacher.

b) Bei dir sieht es so aus, als werden die gridx- und gridy-Koordinaten nicht richtig gesetzt:
koord ist bei (0, 0)
müLabel bei (0, 1), also UNTER dem koord
müAktuell bei (1, 1) also rechts von müLabel und ... ach das wird mir nun auch zu kompliziert ;) Skizze bitte.
 
Das erste Bild im Anhang zeigt ungefähr wies aussehen soll.(Der zweite JSlider ganz unten ist leider abgeschnitten, nur der Schieberegler ist sichtbar) Das zweite wies tatsächlich aussieht, müAktuell und varianzAktuell sind die beiden Zahlen ganz rechts. Und die sollten aber nicht ganz am Rand sondern an müLabel/Erwartungswert und sigmaQuadrat/Varianz hängen. Der Rest ist so wies sein soll.
 

KrokoDiehl

Top Contributor
Ah ... sehr schön.

Sieht nach dem Attribut anchor aus. Setz mal das GridBagConstraint.anchor von den Label "Erwartungswert" und "Varianz" auf GridBagConstraints.BASELINE_TRAILING und von den jeweiligen Wert-Labeln auf GridBagConstraints.BASELINE_LEADING.
Wenn das soweit passt, könntest du noch GridBagConstraint.insets setzen damit die Komponenten nicht so aufeinander kleben.
 

KrokoDiehl

Top Contributor
Benutzt du selbst schon, ich meine das da:
Java:
x0y0.anchor = GridBagConstraints.NORTH;

Für das GridBagLayout ist es auch immer die Frage, wo es die Komponente im Verfügbaren Platz positionieren soll. Das ist der anchor. Standard ist
Code:
BASELINE_LEADING
, das ist links zentriert.
Ich verwende halt immer BASELINE_LEADING und so, aber NORTH, EAST etc. gehen sicher auch.

Das anders ist z.B.
Java:
x0y0.insets = new Insets(5, 5, 0, 0);
Das stellt einen Abstand zum Rand ein.
 
Ok North, East kennt Netbeans bei mir. Aber Base_Line_Leading oder so kennt er nicht.
Wie sollte ich das ganze mit Himmelsrichtungen machen ? Hab schon mit West und East rumexperimentiert, hat aber alles nicht geklappt.
 

L-ectron-X

Gesperrter Benutzer
Probiers mal aus:
Java:
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.text.*;

public class ErwartungswertUndVarianz extends JApplet
{ //Eigentlich nicht so wichtig für die Frage, das Wichtige steht in init() unten
    public Dimension appSize;
    public int appWidth;
    public int appHeight;

    public double mü = 0;
    public double varianz = 1;

    public final double müMax = 3;
    public final double varianzMax = 3;
    public final double varianzMin = 1;

    public final double pMax = 0.4;//größter dargestellter p-Wert
    public final double zMax = 3;//größter dargestellter z-Wert

    public final int pTeilung = 10;//Anzahl der Unterteilungen der p-Achse
    public final int zTeilung = 10;//Anteil der Unterteilungen der z-Achse

    public final int AbstandZLabelsGitter = 20;
    public final int AbstandGitterRechts = 30;

    public final int graphSchrittweite = 10;

    public int müLabelNumber;//Position der müAnzeige im Contenpane
    public int varianzLabelNumber;//Position der varianzAnzeige im Contenpane
    public int koordinatensystemNumber;//Position des Koordinatensystems in der Contentpane

    public int gitterWidth;
    public final int reglerHeight = 30;
    public final int AbstandMüLabelMüAnzeige = 100;
    public final int müLabelHeight = 40;
    
    private JLabel müAktuell = new JLabel();
    private JLabel sigmaAktuell = new JLabel();

/*Für meine Frage ist eigentlich nur init() interessant, poste der Vollständigkeit halber aber den ganzen Code*/
    @Override
    public void init()
    {
        setSize(new Dimension(600, 600));
        getContentPane().setBackground(Color.CYAN);
        setLayout(new GridBagLayout());

        appWidth = getWidth();
        appHeight = getHeight();

        //Koordinatensystem zum Zeichnen des Graphen hinzufügen
        GridBagConstraints x0y0 = new GridBagConstraints();
        x0y0.gridx = 0;
        x0y0.gridy = 0;
        x0y0.fill = GridBagConstraints.BOTH;
        x0y0.weightx = 1.0;
        x0y0.weighty = 1.0;
        x0y0.anchor = GridBagConstraints.NORTH;
        Koordinatensystem koord = new Koordinatensystem();
        koordinatensystemNumber = this.getContentPane().getComponentCount();
        add(koord, x0y0);

        //mü-Label aktuellen mü-Wert hinzufügen
        //Hilfspanel
        JPanel helperPanel1 = new JPanel(new GridLayout(1, 0));
        helperPanel1.setOpaque(false);
        JLabel müLabel = new JLabel("Erwartungswert \u03BC : ");
        //müLabel.setBackground(Color.GREEN);
        müLabel.setOpaque(false);
        helperPanel1.add(müLabel);

        //müAktuell.setBackground(Color.RED);
        müAktuell.setOpaque(false);
        müLabelNumber = getContentPane().getComponentCount();
        helperPanel1.add(müAktuell);
        setMü(0);

        
        GridBagConstraints x0y1 = new GridBagConstraints();
        x0y1.gridx = 0;
        x0y1.gridy = 1;
        add(helperPanel1, x0y1);

        //Schieberegler zum Verstellen von mü hinzufügen
        GridBagConstraints x0y2= new GridBagConstraints();
        x0y2.gridx = 0;
        x0y2.gridy = 2;
        x0y2.fill = GridBagConstraints.HORIZONTAL;
        JSlider müRegler = new JSlider((int)(- müMax * 10), (int)(müMax * 10), 0);
        müRegler.setPreferredSize(new Dimension(gitterWidth, reglerHeight));
        müRegler.setMajorTickSpacing(3);
        müRegler.setPaintTicks(true);
        müRegler.addChangeListener(new MüListener());
        add(müRegler, x0y2);

        //Varianz-Label und aktuelle Varianz hinzufügen
        JPanel helperPanel2 = new JPanel(new GridLayout(1, 0));
        helperPanel2.setOpaque(false);
        JLabel sigmaQuadrat = new JLabel("Varianz \u03C3\u00B2 : ");
        sigmaQuadrat.setOpaque(false);
        helperPanel2.add(sigmaQuadrat);

        sigmaAktuell.setOpaque(false);
        varianzLabelNumber = getContentPane().getComponentCount();
        helperPanel2.add(sigmaAktuell);
        setVarianz(1);

        GridBagConstraints x0y3 = new GridBagConstraints();
        x0y0.gridx = 0;
        x0y3.gridy = 3;
        add(helperPanel2, x0y3);

        //Schieberegler zum Verstellen von Varianz
        GridBagConstraints x0y4 = new GridBagConstraints();
        x0y4.gridx = 0;
        x0y4.gridy = 4;
        x0y4.fill = GridBagConstraints.HORIZONTAL;
        JSlider varianzRegler = new JSlider((int)(varianzMin*10), (int)(varianzMax * 10), (int)(varianzMin*10));
        varianzRegler.setPreferredSize(new Dimension((gitterWidth*3)/4, reglerHeight));
        varianzRegler.setMajorTickSpacing(1);
        varianzRegler.setPaintTicks(true);
        varianzRegler.addChangeListener(new VarianzListener());
        add(varianzRegler, x0y4);
    }

    public void setMü(double mü)
    {
        this.mü = mü;
        aktualisiereMüAnzeige();
        repaint();
    }

    public void setVarianz(double varianz)
    {
        this.varianz = varianz;
        aktualisiereVarianzAnzeige();
        repaint();
    }

    public void aktualisiereMüAnzeige()
    {
        DecimalFormat form = new DecimalFormat("'  '0.0;-0.0");
        String müAnzeigeNeu = form.format(mü);
        //((JLabel)(getContentPane().getComponent(müLabelNumber))).setText(müAnzeigeNeu);
        müAktuell.setText(müAnzeigeNeu);

    }

    public void aktualisiereVarianzAnzeige()
    {
        DecimalFormat form = new DecimalFormat("'  '0.0");
        String varianzAnzeigeNeu = form.format(varianz);
        //((JLabel)getContentPane().getComponent(varianzLabelNumber)).setText(varianzAnzeigeNeu);
        sigmaAktuell.setText(varianzAnzeigeNeu);
    }

    public double dichteFunktion(double x)
    {
        return
                Math.exp(- Math.pow(x - mü, 2) / (2 * varianz))
                / Math.sqrt(2 * Math.PI * varianz);
    }

    public class Koordinatensystem extends JPanel
    {
        int gitterHeight;
        //int gitterWidth;

        int pGitterSchrittweite;
        int zGitterSchrittweite;

        int graphPunkte;

        public Koordinatensystem()
        {
            setBackground(Color.WHITE);

            setPreferredSize(new Dimension(appWidth, appHeight*3/4));

            gitterHeight = getPreferredSize().height - AbstandZLabelsGitter;
            gitterWidth = getPreferredSize().width - AbstandGitterRechts;

            pGitterSchrittweite = gitterHeight / pTeilung;
            zGitterSchrittweite = gitterWidth / zTeilung;

            graphPunkte = gitterWidth / graphSchrittweite;

            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

            add(new Graph(this));
            getComponent(0).setBounds(0, 0, gitterWidth, gitterHeight);
        }

        @Override
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);

            g.setColor(Color.GRAY);

            //Zeichne horizontale Gitter-Linien
            for(int i = 0; i <= pTeilung; i++)
                g.drawLine(0, i * pGitterSchrittweite, gitterWidth, i * pGitterSchrittweite);

            //Zeichne vertikale Gitter-Linien
            for(int i = 0; i <= zTeilung; i++)
                g.drawLine(i * zGitterSchrittweite, 0, i * zGitterSchrittweite, gitterHeight);

            //Zeichne z-Achsen-Beschriftung
            g.setColor(Color.BLACK);
            double zAchsenWertSchrittweite = 2 * zMax / zTeilung;
            DecimalFormat format = new DecimalFormat("0.0");
            for(int i = 0; i <= zTeilung; i++)
                g.drawString(format.format(i*zAchsenWertSchrittweite - zMax), i*zGitterSchrittweite, gitterHeight + AbstandZLabelsGitter);

            g.drawLine(0, gitterHeight, gitterWidth, gitterHeight);

            //zeichne z-Achsenbeschriftung
            DecimalFormat form = new DecimalFormat("0.00");
            double pSchrittweite = pMax / pTeilung;
            for(int p = 0; p <= pTeilung; p++)
                g.drawString(form.format(pMax-p*pSchrittweite),gitterWidth/2 , p*pGitterSchrittweite);

            g.drawLine(gitterWidth/2, 0, gitterWidth/2, gitterHeight);
        }

        public class Graph extends JPanel
        {
            int[] xPos;
            double[] zWerte;

            public Graph(Koordinatensystem koord)
            {
                setPreferredSize(koord.getPreferredSize());
                setOpaque(false);

                xPos = new int[graphPunkte + 1];
                for(int i = 0; i <= graphPunkte; i++)
                    xPos[i] = i * graphSchrittweite;

                zWerte = new double[graphPunkte + 1];
                double zSchrittweite = 2 * zMax / graphPunkte;
                for(int i = 0; i <= graphPunkte; i++)
                    zWerte[i] = i * zSchrittweite - zMax;
            }

            @Override
            public void paintComponent(Graphics g)
            {
                super.paintComponent(g);

                int[] yPos = new int[graphPunkte + 1];
                double pInY = gitterHeight / pMax;
                for(int i = 0; i <= graphPunkte; i++)
                {
                    int yWert = (int)(gitterHeight - dichteFunktion(zWerte[i]) * pInY);
                    if(yWert > pGitterSchrittweite * pTeilung)//Korrektur von Rundungsfehlern
                        yWert = pGitterSchrittweite * pTeilung;
                    yPos[i] = yWert;
                }

                g.setColor(Color.BLUE);
                g.drawPolyline(xPos, yPos, graphPunkte+1);
            }
        }
    }

    public class MüListener implements ChangeListener
    {
        public void stateChanged(ChangeEvent e)
        {
            double müNeu = ((JSlider)(e.getSource())).getValue();
            müNeu /= 10;
            setMü(müNeu);
        }
    }

    public class VarianzListener implements ChangeListener
    {
        public void stateChanged(ChangeEvent e)
        {
            double varianzNeu = ((JSlider)(e.getSource())).getValue();
            varianzNeu /= 10;
            setVarianz(varianzNeu);
        }
    }

}
 
Ok cool, danke. Das sieht vernünftig aus. Aber gehts nicht anders ohne Hilfspanel, (und Baseline, die mein netbeans einfach nicht kennt)? Nutze eigentlich GridBagLayout damit ich nicht so verschaltet mit Unterpanels arbeiten muss.
 

L-ectron-X

Gesperrter Benutzer
Das Problem beim GridBagLayout ist, dass wenn in zwei oder mehreren gleich dimensionierten Komponenten Texte mit unterschiedlichen Längen sind, bekommt die Komponente mit dem längsten Text immer den meisten Platz.
Man kann das nur beeinflussen, in dem man mit den Gewichtungen spielt oder die PreferredSize der anderen Komponenten auf die gleiche Größe setzt, wie die Komponente mit dem längsten Text.
Das funktioniert zwar, kann aber u.U. auf anderen Systemen und bei Veränderung der Größe des Toplevel-Containers oder der einbettenden Komponente sich verschieben oder wieder etwas anders aussehen.

Das Verschachteln von Komponenten ist kein Nachteil.

[EDIT]
...die mein netbeans einfach nicht kennt?
Mit welcher NetBeans-Version und welchem JDK arbeitest du?[/EDIT]
 
@L-ectron-X : Also ich nutze Netbeans 6.8 und
java : 1.5.0_30; Java HotSpot(TM) Client VM 1.5.0_30-161

Eine andere Frage (passt eigentlich mehr zum Anfängerbereich, hat aber mit diesem Applet zu tun)
Das Ergebnis folgender Code-Zeilen überrascht mich :

private JLabel müAktuell = new JLabel();

helperPanel1.add(müAktuell); //müAktuell wird einem Hilfspanel zugeordnet, dass wiederum dem Applet hinzugefügt wird

müAktuell.setText(müAnzeigeNeu);

Wieso klappt das ? Ich bin grade wegen Javas call-by-value verwirrt. Meiner Erwartung nach sollte eigentlich ablaufen :
1. ein privates JLabel müAktuell wird initalisiert
2. Der add-Methode des Hilfpanels wird müAktuell als Parameter übergeben,
der Parameter müLAbel wird kopiert (call-by-value), und diese Kopie wird dann im Funktionsrumpf von add() dem component-array hinzugefügt
3. setText(müAnzeigeNeu) wird am privaten müAktuell aufgerufen, dieses ändert seinen Text. Angezeigt wird auf dem Screen aber nur der Inhalt des Hilfspanels, und das ist die Kopie des JLabels müAktuell, aber nicht dieses selbst, bleibt also von dieser Änderung unberührt.

Zwar speichert das component-Array im Hilfspanel ja eine Referenz und keinen Wert, aber es speichert halt die Referenz auf eine Kopie. Und dem Datenfeld text des JLabel müAktuell, kann durch setText() ja auch nur eine Kopie und keine Referenz übergeben werden.

Offenbar hab ich die Java-Grundlagen doch nicht so gut durchdrungen wie erhofft :oops:
Erleuchtet mich :)
 

bERt0r

Top Contributor
Dann les es nochmal durch: primitive Datentypen (int,byte,char) werden kopiert, Objekte nicht, da wird nur der Referenzzeiger kopiert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
G Gui updated beim zweiten Aufruf nicht mehr AWT, Swing, JavaFX & SWT 15
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Kann mir jemand beim MediaPlayer helfen ? AWT, Swing, JavaFX & SWT 2
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
ruutaiokwu Swing windowStateChanged macht exakt das Gegenteil beim Verändern der Fenstergrösse AWT, Swing, JavaFX & SWT 3
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
steven789hjk543 Swing Verstehe etwas beim GUI nicht AWT, Swing, JavaFX & SWT 3
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
N Eclipse - GUI - MacBook - Buttonsichtbarkeit beim Anlegen/Erstellen AWT, Swing, JavaFX & SWT 14
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
L Charset beim Drucken falsch AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
W Kodierung (CharSet) beim Schreiben ändern AWT, Swing, JavaFX & SWT 1
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
P Scrollbalken verschwinden beim Zoomen AWT, Swing, JavaFX & SWT 4
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
I JavaFX Speichern der eingefügten Einträge beim Neustart des Programms AWT, Swing, JavaFX & SWT 2
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
D JavaFX build.fxbuild error beim Erstellen einer exe AWT, Swing, JavaFX & SWT 2
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing Vorgehen beim Aufruf der Klassen/Methoden AWT, Swing, JavaFX & SWT 7
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
K Swing Automatisches "Packen" beim "Neu-Painten" AWT, Swing, JavaFX & SWT 2
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
X JavaFX TableView Error beim clicken des außenbereiches AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben