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.
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);
}
}
}