Hallo zusammen,
ich habe folgendes Problem, für das ich beim Durchsuchen des Forums leider keine Lösung gefunden habe.
Ich habe ein JFrame ('Hauptfenster'), welches in verschiedene Bereiche unterteilt ist und für das ich deshalb ein GridBagLayout benutze.
Hier der Konstruktor der Klasse.
In der Klasse "Display" wiederum werden verschiedene Komponenten gezeichnet (in der Methode "paintComponent (Graphics g)"), im Einzelnen handelt es sich um ein Rechteck ('punkterechteck') und ein Array voller Punkte (genau genommen 3600 Punkten)(Array 'punkte').
Die Punkte sowie das Rechteck werden im Display auch korrekt angezeigt, allerdings werden die anderen, außerhalb des Displays liegenden Komponenten des JFrames 'Hauptfenster' nicht korrekt, bzw. gar nicht angezeigt. Erst wenn ich zur Laufzeit dahin klicke, wo das Textfeld und die Buttons lokalisiert sind, werden sie angezeigt. Das Label wird überhaupt nicht angezeigt.
Woran kann das liegen? Habe schon mit Validate(), Revalidate() und Repaint() herumexperimentiert, ohne Erfolg
Wenn ich übrigens den rot markierten Teil der Methode 'paintComponent' auskommentiere und dementsprechend die Punkte nicht anzeige und nur das Rechteck, besteht das Problem nicht mehr und alle Komponenten des JFrames, bzw. des GridBagLayouts werden angezeigt.
Ich hoffe, ich habe das Problem halbwegs verständlich geschildert und ich hoffe, dass mir jemand von Euch helfen kann.
Vielen Dank schon einmal im Voraus.
ich habe folgendes Problem, für das ich beim Durchsuchen des Forums leider keine Lösung gefunden habe.
Ich habe ein JFrame ('Hauptfenster'), welches in verschiedene Bereiche unterteilt ist und für das ich deshalb ein GridBagLayout benutze.
Hier der Konstruktor der Klasse.
Java:
public Hauptfenster()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(1200, 800);
this.setBackground(Color.LIGHT_GRAY);
Container contentPane = this.getContentPane();
GridBagLayout layout = new GridBagLayout();
contentPane.setLayout(layout);
GridBagConstraints gbc = new GridBagConstraints();
//Label
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.weighty = 1;
JLabel label = new JLabel("Aktuelle Information:");
layout.setConstraints(label, gbc);
contentPane.add(label);
label.setVisible(true);
//Textfeld
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.gridheight = 4;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 2;
gbc.weighty = 4;
//Erstellen und Einbinden des Textfeldes
textfeld = new JTextField();
layout.setConstraints(textfeld, gbc);
contentPane.add(textfeld);
//Versehen des Textfeldes mit ScrollPanes
JScrollPane scrollPane = new JScrollPane(textfeld);
scrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
layout.setConstraints(scrollPane, gbc);
contentPane.add(scrollPane);
textfeld.getDocument().addDocumentListener(dltextfeld);
textfeld.disable();
textfeld.setVisible(true);
//Button zum Anzeigen der Information
gbc.gridx = 0;
gbc.gridy = 6;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 2;
gbc.weighty = 1;
JButton anzeigebutton = new JButton("Information anzeigen");
anzeigebutton.addActionListener(alAnzeigebutton);
layout.setConstraints(anzeigebutton, gbc);
contentPane.add(anzeigebutton);
anzeigebutton.setVisible(true);
//Speicherbutton
gbc.gridx = 0;
gbc.gridy = 7;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 2;
gbc.weighty = 1;
JButton speicherbutton = new JButton("in Datei speichern");
speicherbutton.addActionListener(alSpeicherbutton);
layout.setConstraints(speicherbutton, gbc);
contentPane.add(speicherbutton);
speicherbutton.setVisible(true);
//Display
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 10;
gbc.gridheight = 7;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 5;
gbc.weighty = 2;
//Erstellen und Einbinden des Displays
Display display = new Display();
layout.setConstraints(display, gbc);
contentPane.add(display);
display.repaint();
display.setVisible(true);
}
In der Klasse "Display" wiederum werden verschiedene Komponenten gezeichnet (in der Methode "paintComponent (Graphics g)"), im Einzelnen handelt es sich um ein Rechteck ('punkterechteck') und ein Array voller Punkte (genau genommen 3600 Punkten)(Array 'punkte').
Java:
public void paintComponent (Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.black);
g2.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2.drawRect((int)punkterechteck[0].xkoordinate,(int)punkterechteck[0].ykoordinate, breite, hoehe);
[COLOR="Red"]for(int x = 0; x< punkte.length; x++){
g2.drawLine((int)punkte[x].xkoordinate,(int)punkte[x].ykoordinate, (int)punkte[x].xkoordinate,(int)punkte[x].ykoordinate);
}[/COLOR]
}
Die Punkte sowie das Rechteck werden im Display auch korrekt angezeigt, allerdings werden die anderen, außerhalb des Displays liegenden Komponenten des JFrames 'Hauptfenster' nicht korrekt, bzw. gar nicht angezeigt. Erst wenn ich zur Laufzeit dahin klicke, wo das Textfeld und die Buttons lokalisiert sind, werden sie angezeigt. Das Label wird überhaupt nicht angezeigt.
Woran kann das liegen? Habe schon mit Validate(), Revalidate() und Repaint() herumexperimentiert, ohne Erfolg
Wenn ich übrigens den rot markierten Teil der Methode 'paintComponent' auskommentiere und dementsprechend die Punkte nicht anzeige und nur das Rechteck, besteht das Problem nicht mehr und alle Komponenten des JFrames, bzw. des GridBagLayouts werden angezeigt.
Ich hoffe, ich habe das Problem halbwegs verständlich geschildert und ich hoffe, dass mir jemand von Euch helfen kann.
Vielen Dank schon einmal im Voraus.