Ich habe ein Panel mit 16 Objekt drauf und platziere dieses mit BorderLayout.NORTH auf dem JFrame.
Wenn man einen Button drückt, wird ein Diagramm Komponent unten platziert. Jedoch wird dieser Komponent weiter oben platziert, so dass die Hälfte verdeckt wird. Ich weiss nicht wieso.
Ich habe es schon mit BorderLayout.SOUTH, CENTER und gar nichts probiert.
Wenn man einen Button drückt, wird ein Diagramm Komponent unten platziert. Jedoch wird dieser Komponent weiter oben platziert, so dass die Hälfte verdeckt wird. Ich weiss nicht wieso.
Ich habe es schon mit BorderLayout.SOUTH, CENTER und gar nichts probiert.
Code:
package window;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class JSimulator extends JFrame
{
private static final long serialVersionUID = -2431337647155760074L;
private final int HEIGHT = 450;
private final int WIDTH = 500;
//JTextfields
private JTextField jtfv0;
private JTextField jtfSpringConstant;
private JTextField jtfAngle;
private JTextField jtfBallMass;
private JTextField jtfg;
private JTextField jtfSpringTravel;
//Chart, simulation object
Diagramm chart;
public static void main(String[] args)
{
//System.out.println(Math.sin(Math.toRadians(90)));
new JSimulator();
}
private JSimulator()
{
//Window settings
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("JSimulator V. 0.1");
setResizable(false);
////Actionlistener
ActionListener alButton = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
e.getActionCommand();
//Show chart
if(e.getActionCommand().equals("Diagramm"))
{
double v0 = new Double(jtfv0.getText()).doubleValue(); //Starting speed
double alpha = new Double(jtfAngle.getText()).doubleValue(); //Angle
double g = new Double(jtfg.getText()).doubleValue(); //gravitational acceleration
showDiagramm(v0, alpha, g);
}
else if(e.getActionCommand().equals("Beenden")) //Exit programm
{
System.exit(0);
}
}
};
////JPanel
JPanel jValues = new JPanel(new GridLayout(0, 4));
///Fields
//v0
JLabel jlv0 = new JLabel(" v0 (m/s)");
jValues.add(jlv0);
jtfv0 = new JTextField("4");
jValues.add(jtfv0);
//Spring constant
JLabel jlSpringConstant = new JLabel(" D (N/m)");
jValues.add(jlSpringConstant);
jtfSpringConstant = new JTextField();
jValues.add(jtfSpringConstant);
//Angle
JLabel jlAngle = new JLabel(" Winkel (°)");
jValues.add(jlAngle);
jtfAngle = new JTextField("45");
jValues.add(jtfAngle);
//Spring travel
JLabel jlSpringTravel = new JLabel(" Federweg (m)");
jValues.add(jlSpringTravel);
jtfSpringTravel = new JTextField();
jValues.add(jtfSpringTravel);
//g
JLabel jlg = new JLabel(" g (m/s^2)");
jValues.add(jlg);
jtfg = new JTextField("9.81");
jValues.add(jtfg);
//Mass of the ball
JLabel jlBallMass = new JLabel(" Kugelmasse (g)");
jValues.add(jlBallMass);
jtfBallMass = new JTextField();
jValues.add(jtfBallMass);
//Button
//Simulation
JButton jbSimulate = new JButton("Simulation");
jbSimulate.addActionListener(alButton);
jValues.add(jbSimulate);
//Diagramm
JButton jbDiagramm = new JButton("Diagramm");
jbDiagramm.addActionListener(alButton);
jValues.add(jbDiagramm);
//Reset
JButton jbReset = new JButton("Zurücksetzen");
jbReset.addActionListener(alButton);
jValues.add(jbReset);
//Shut down
JButton jbEnd = new JButton("Beenden");
jbEnd.addActionListener(alButton);
jValues.add(jbEnd);
//Add jpanel to this jframe
add(jValues, BorderLayout.NORTH);
//Make visible
setVisible(true);
}
/**
* Adds a chart on the jframe
*
* @param v0 starting speed
* @param alpha angle
* @param g gravitational acceleration
*/
private void showDiagramm(double v0, double alpha, double g)
{
//Check for existing objects
if(chart != null)
{
remove(chart); //Remove existing chart
chart = null;
}
//Create chart
chart = new Diagramm(v0, alpha, g);
add(chart);
repaint();
}
}