# Durch DrawLine verschwindet das Fenster und die Objekte



## Xclipse (30. Aug 2007)

Hallo,

wie der Titel schon sagt:

Durch DrawLine verschwindet das Fenster und die darin enthaltene Objekte

    public void paint(Graphics g) {
        // Rote Linie zeichnen
        g.setColor (Color.RED);
        g.drawLine(10, 200, 200, 200);
        g.drawLine(10, 200, 200, 200);
     }

Folgendes problem habe ich:

In einem JInternalFrame habe ich einen JPanel.
In diesem JPanel habe ich einen GridLayout, aufgeteilt in 3X GridBagLayouts.

Ich möchte 2 Linien Zeichnen, sobald ich das JInternalFrame über das HauptProg. aufrufe,
werden nur diese Linie angezeigt und ich muss mit der Maus über das JInternalFrame bewegen
und zum Teil klicken, damit alle objekte (JTextFields und JButtons) angezeigt werden, die JLabels
werden überhaupt nicht angezeigt.

Sehr merkwürdig! :bahnhof: 

Was kann es denn sein!?  :?:


----------



## Wildcard (30. Aug 2007)

Bei Swing wird nicht paint, sondern paintComponent überschrieben.
Der erste Aufruf sollte dabei immer super.paintComponent(g) sein.


----------



## Xclipse (30. Aug 2007)

Das Übrschreiben habe ich verstanden. Danke

Aber wie soll ich es mit super.paintComponent(g) anstellen?

Soll ich es so machen:

    public void initialize() {
        this.setSize(900, 700);
        this.setTitle("Eingabe Formular");
        this.setResizable(true);
        this.setMaximizable(true);
        this.setIconifiable(true);
        this.setClosable(true);
        this.setContentPane(getHaputPanel());
+     super.paintComponent(g);
    }

oder

    public eingabeFormular() {
        initialize();
        this.setVisible(true);
 +      super.paintComponent(g);
    }

oder

    public void paintComponent(Graphics g) {
        g.setColor (Color.red);
        g.drawLine(100, 350, 800, 350);
        g.drawLine(200, 10, 200, 200);
+      super.paintComponent(g);
     }

Naja.. ich leg mich mal hin und Morgen sieht die Welt ganz anders aus!!  :gaen: 

Danke Nochmals

guten Nacht JohnBoy  :gaen: 
guten Nacht Elizabeth  :gaen:


----------



## Ariol (30. Aug 2007)

public void paintComponent(Graphics g) { 
 super.paintComponent(g); 
 g.setColor (Color.red); 
 g.drawLine(100, 350, 800, 350); 
 g.drawLine(200, 10, 200, 200); 
 }


----------



## Xclipse (31. Aug 2007)

Es tut mir leid aber die sch.. will nicht funktionieren!!!! :x
Ich werde wahnsinnig!!!!!! :autsch: 

Dieses Fenster wird in einem JDesktopPane aufgerufen.
Ich möchte gerne in der mitte vom gridPanel_Center ein Kreuz zeichnen.
Es werden aber auch Labels und Texte hinzu kommen. (Was kein Problem ist!!!)

Es geht einfach nicht diese komische Classe, Methode, Funktion "nicht Funktion" (oder was es auch immer sein mag, ich bin total durcheinander und blicke selber nicht mehr durch).


```
public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.setColor(Color.yellow);
		g.drawLine(600, 500, 250, 500);
	}
```

Kann mir bitte einer helfen? DANKE!!!



```
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.SystemColor;

import javax.swing.JInternalFrame;
import javax.swing.JPanel;

class linie extends JInternalFrame {

    public JPanel hauptPanel = null;
    public JPanel gridPanel_North = null;
    public JPanel gridPanel_North_West = null;
    public JPanel gridPanel_North_East = null;
    public JPanel gridPanel_Center = null;
    public JPanel gridPanel_South = null;

    public static void main(String[] args) {
        linie l = new linie();
        l.setVisible(true);
    }

    public linie() {
        super();
        initialize();
    }

    public void initialize() {
        this.setSize(900, 700);
        this.setTitle("Eingabe Formular");
        this.setResizable(true);
        this.setContentPane(getHaputPanel());
    }

    public JPanel getHaputPanel() {
        if (hauptPanel == null) {

            GridLayout gridLayout_hauptPanel = new GridLayout(3,1);
            BorderLayout borderLayout = new BorderLayout();

            hauptPanel = new JPanel();
            hauptPanel.setLayout(gridLayout_hauptPanel);
            hauptPanel.setBackground(SystemColor.cyan);

            gridPanel_North = new JPanel();
            gridPanel_North.setLayout(borderLayout);
            gridPanel_North.setBackground(Color.red);

            gridPanel_North_West = new JPanel();
            gridPanel_North_West.setLayout(new GridBagLayout());
            gridPanel_North_West.setBackground(Color.red);

            gridPanel_North_East = new JPanel();
            gridPanel_North_East.setLayout(new GridBagLayout());
            gridPanel_North_East.setBackground(Color.red);

            gridPanel_North.add(gridPanel_North_West, BorderLayout.WEST);
            gridPanel_North.add(gridPanel_North_East, BorderLayout.EAST);

            gridPanel_Center = new JPanel();
            gridPanel_Center.setLayout(new GridBagLayout());
            gridPanel_Center.setBackground(Color.blue);

            gridPanel_South = new JPanel();
            gridPanel_South.setLayout(new GridBagLayout());
            gridPanel_South.setBackground(Color.orange);

            hauptPanel.add(gridPanel_North, BorderLayout.NORTH);
            hauptPanel.add(gridPanel_Center, java.awt.BorderLayout.CENTER);
            hauptPanel.add(gridPanel_South, BorderLayout.SOUTH);

        }
        return hauptPanel;
    }
}
```


----------



## Wildcard (31. Aug 2007)

```
public static void main(String[] args) {
        linie l = new linie();
        l.setVisible(true);
    }
```
 :shock:  :autsch: 
Was soll denn das sein?
Das Ding heißt J*Internal*Frame und ist als MDI zu verwenden, sprich in einer JDesktopPane


----------



## Xclipse (31. Aug 2007)

Danke für den Hinweis!

Vor lauter Kopieren, Einfügen und Testen bin ich durcheinander.

Im ausführlichen Quellcode ist es auch richtig.

Die main Methode habe ich rausgenommen und im Konstruktor habe ich
noch this.setVisible(true); eingefügt.

Alles funktioniert wie es sein sollte aber die Linien werden nicht gezeichnet.  :cry: 

Was mache ich falsch oder was übersehe ich hier  :!:  :?:  :bahnhof: 

S.O.S bitte um hilfe


----------



## André Uhres (31. Aug 2007)

Xclipse hat gesagt.:
			
		

> ..Ich werde wahnsinnig!!!!!! :autsch: . Ich möchte gerne in der mitte vom gridPanel_Center ein Kreuz zeichnen..


Nana, wer wird denn gleich durchdrehen :shock: 
Erstmal... gaaanz wichtig!...Klassennamen immer mit grossem Anfangsbuchstaben schreiben,
im Gegensatz zu Variablennamen und Methodennamen.
Und mach bitte public nur was auch public sein muss!

```
package desktop;
/*
 * LinieDemo.java
 */
import java.awt.*;
import javax.swing.*;
public class LinieDemo extends JFrame {
    private JDesktopPane desktop;
    private Linie linie;
    public LinieDemo() {
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        desktop = new JDesktopPane();
        getContentPane().add(desktop, BorderLayout.CENTER);
        linie = new Linie();
        linie.setVisible(true);
        desktop.add(linie);
    }
    public static void main(final String args[]) {new LinieDemo().setVisible(true);}
}
class Linie extends JInternalFrame {
    private  JPanel hauptPanel = null;
    private JPanel gridPanel_North = null;
    private JPanel gridPanel_North_West = null;
    private JPanel gridPanel_North_East = null;
    private JPanel gridPanel_Center = null;
    private JPanel gridPanel_South = null;
    public Linie() {
        super();
        initialize();
    }
    private void initialize() {
        this.setSize(900, 700);
        this.setTitle("Eingabe Formular");
        this.setResizable(true);
        this.setContentPane(getHaputPanel());
    }
    private JPanel getHaputPanel() {
        if (hauptPanel == null) {
            GridLayout gridLayout_hauptPanel = new GridLayout(3,1);
            BorderLayout borderLayout = new BorderLayout();
            hauptPanel = new JPanel();
            hauptPanel.setLayout(gridLayout_hauptPanel);
            hauptPanel.setBackground(SystemColor.cyan);
            gridPanel_North = new JPanel();
            gridPanel_North.setLayout(borderLayout);
            gridPanel_North.setBackground(Color.red);
            gridPanel_North_West = new JPanel();
            gridPanel_North_West.setLayout(new GridBagLayout());
            gridPanel_North_West.setBackground(Color.red);
            gridPanel_North_East = new JPanel();
            gridPanel_North_East.setLayout(new GridBagLayout());
            gridPanel_North_East.setBackground(Color.red);
            gridPanel_North.add(gridPanel_North_West, BorderLayout.WEST);
            gridPanel_North.add(gridPanel_North_East, BorderLayout.EAST);
            gridPanel_Center = new JPanel(){
                public void paintComponent(Graphics g) {
                    super.paintComponent(g);
                    g.setColor(Color.red);
                    g.drawLine(100, 110, 800, 110);
                    g.drawLine(440, 10, 440, 200);
                }
            };
            gridPanel_Center.setLayout(new GridBagLayout());
            gridPanel_Center.setBackground(Color.blue);
            gridPanel_South = new JPanel();
            gridPanel_South.setLayout(new GridBagLayout());
            gridPanel_South.setBackground(Color.orange);
            hauptPanel.add(gridPanel_North, BorderLayout.NORTH);
            hauptPanel.add(gridPanel_Center, BorderLayout.CENTER);
            hauptPanel.add(gridPanel_South, BorderLayout.SOUTH);
        }
        return hauptPanel;
    }
}
```


----------



## Xclipse (31. Aug 2007)

Buah!!! :applaus:
Sch.. die Wand an!!! :wink:
Danke man... wirklich!!!! :toll:

Ich lerne mit Eclipse+VE halt so, dass ich die Objekte einfüge und mir den generierten Code auswerte ggf. im
Internet, Bücher usw. nachlese. Wenn ich z.B. Buttons einfüge, wird dieses Objekt ausserhalb
angelgt und innerhalb von getHaputPanel() zum entsprächenden Panel hinzu addiert und deshalb
dachte ich dass es so ungefähr passieren muss!!!

Aber was hier passiert ist mir bischen zuviel.
Warum kann ich es nicht auch so hizu addieren??? :bahnhof: 
Da wäre ich doch nie darauf gekommen!

Ich wäre Dir sehr dankbar wenn Du es kurz kommentieren könntest.

Die vorgaben werde ich in zukunft beherzigen.


----------



## Gast (31. Aug 2007)

hallo ich habe auch so ein Problem...

nur will ich eigendlich nur ein Linen Gitter Zeichen.. es hat auch mal funktioniert*lang lang ist es her* aber jetzt geht es nicht mehr.. so wie ich das sehe wohllt ihr eine methode machen die paintComponent heißt und dafür da ist das Panel neu zu zeichnen.. nur mit dem Super haut es bei mir überhaupt nicht hin

das ist die Methode

	public void paintComponent( Graphics g ) {

		super.paintComponent( g );
		g.setColor(Color.black);

		int width = getSize().width;
		int height = getSize().height;

		for( int i = width/8; i< width; i+=width/8){
			getGraphics().drawLine(i, height/8, i, height);
		}

		for( int i = height/8; i< height; i+=height/8){
			getGraphics().drawLine(0, i, width, i);
		}
	}

so wie ihr das habt nur mit meinem Gitter.. geht aber auch nicht..

ohne super bekomme ich eine Exception aber fenster und Gitter werden angezeigt


----------



## Gast (31. Aug 2007)

ach so ich benutze nur ein Jframe


----------



## Wildcard (31. Aug 2007)

JFrame hat überhaupt keine paintComponent die man überschreiben könnte


----------



## Gast (31. Aug 2007)

wie mache ich es denn dann? mit paint geht es auch nicht eine Extra methode geschrieben und extra aufgerufen geht auch nicht
ich weiß nicht mehr weiter


----------



## Gast (31. Aug 2007)

arg alles klar.. man macht es pit paint und sagt super.paint(g)
ich volltrottel


----------

