hallöchen
hab folgendes problem:
ich hab ein JFrame, das eigentlich eine aus JPanel abgeleitete klasse "diagramm" enthalten soll. die klasse diagramm benötigt aber die insets des jframes und die sind ja erst verfügbar wenn das jframe auch wirklich angezeigt wird (und nicht schon wenn das jframe per konstruktor erstellt wird). wie löst man dieses problem?
ich hab mir gedacht: erstell ich halt das jframe, setz es auf visible und füge dann mein jpanel ein. das geht aber ned (es passiert gar nix).
hier mal mein code:
das "blubb" sieht man. aber mein diagramm nicht. und nein, es sollte nicht am diagramm liegen. ich hab das schon direkt in ein frame gezeichnet, das ging (das was in paintComponent steht, stand in der paint-fkt des frames). aber ich will jetzt noch ne scrollbare tabelle neben das diagramm packen und dafür muss ich wohl swing nehmen und das diagramm eben als jpanel haben.
hab folgendes problem:
ich hab ein JFrame, das eigentlich eine aus JPanel abgeleitete klasse "diagramm" enthalten soll. die klasse diagramm benötigt aber die insets des jframes und die sind ja erst verfügbar wenn das jframe auch wirklich angezeigt wird (und nicht schon wenn das jframe per konstruktor erstellt wird). wie löst man dieses problem?
ich hab mir gedacht: erstell ich halt das jframe, setz es auf visible und füge dann mein jpanel ein. das geht aber ned (es passiert gar nix).
hier mal mein code:
Code:
package experienceCalculator;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class ExperienceCalculator extends JFrame
{
public static ExperienceCalculator frame;
private Diagramm panel1;
private Container contentPane;
public static void main(String[] args)
{
frame = new ExperienceCalculator();
frame.setVisible(true);
frame.addDiagramm();
}
public ExperienceCalculator()
{
super("Experience Calculator");
this.setBackground(Color.lightGray);
this.setSize(700,500);
this.setResizable(false);
this.setLocation(50,50);
contentPane = getContentPane();
JPanel panel2 = new JPanel();
JLabel test = new JLabel("blubb");
panel2.add(test);
contentPane.setLayout( new GridBagLayout() );
contentPane.add(panel2, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.SOUTHEAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0 ));
}
private void addDiagramm()
{
panel1 = new Diagramm();
contentPane.add(panel1, new GridBagConstraints(0, 0, 1, 1, 1000.0, 1000.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 0, 0 ));
repaint();
}
}
Code:
package experienceCalculator;
import javax.swing.*;
import java.awt.*;
public class Diagramm extends JPanel
{
private int height, width, paintHeight, paintWidth, xAxis, yAxis, top, bottom, left, right;
public Diagramm()
{
}
public void paintComponent(Graphics g)
{
g.setColor(Color.BLACK);
width = ExperienceCalculator.frame.getWidth();
height = ExperienceCalculator.frame.getHeight();
top = ExperienceCalculator.frame.getInsets().top;
bottom = ExperienceCalculator.frame.getInsets().bottom;
left = ExperienceCalculator.frame.getInsets().left;
right = ExperienceCalculator.frame.getInsets().right;
// usw. rest is erstmal ned wichtig...
}
das "blubb" sieht man. aber mein diagramm nicht. und nein, es sollte nicht am diagramm liegen. ich hab das schon direkt in ein frame gezeichnet, das ging (das was in paintComponent steht, stand in der paint-fkt des frames). aber ich will jetzt noch ne scrollbare tabelle neben das diagramm packen und dafür muss ich wohl swing nehmen und das diagramm eben als jpanel haben.