2009-08-22 17 views
2

Ich muss ein Diagramm über ein JPanel zeichnen durch Überschreiben der JPanel paintComponent() -Methode.Zeichnen über ein JPanel und Hinzufügen der JPanel zu JFrame

Beim Entwerfen von GUI mit Netbeans, wenn ich ein JPanel über JFrame ziehen/ablegen, erzeugt es Code, indem es eine private Variable, JPanel-Objekt, erstellt. In so einem Fall kann ich seine Methode überschreiben, um darüber zu zeichnen ...

oder wenn ich Code für eine Klasse schreibe, indem ich das JPanel erweitere und die Methode überschreibe, um es zu malen, muss ich einen neuen JFrame erstellen und füge das JPanel hinzu.

JFrame fr = new JFrame(); fr.add (Scheibe); // Fenster ist das Objekt der Klasse, die JPanel erweitert, wo ich zeichne fr.setVisible (true);

In diesem Fall funktioniert es ..

Aber wenn ich eine Referenz der automatisch erstellten Klasse erhalten, die JFrame von Netbeans und verwenden, die erweitert die JPanel mit der Add-Methode der Verweis hinzuzufügen habe es doesn‘ t Arbeit ...

class x extends JPanel 
{ 
     paintComponent(Graphics g){   //overridden method 

      //my code for drawing say lines goes here.. 
      } 
} 

class y extends Thread 
{ 
     z obj; 

     y(z obj){ 

      this.obj=obj; 
      } 
     public void run(){ 

       x pane=new x(); 
       pane.setVisible(true); 
       obj.add(pane); 
       obj.setVisible(true);   //im not getting the pane visible here.. if i created a new JFrame class here as i said earlier and added the pane to it i can see it.. 
      } 
} 

class z extends JFrame 
{ 
      z(){//code generated by netbeans} 

      public static void main(String args[]) 
      { 


        new y(new z()).start(); 
      } 
} 

Es zeigt keine Fehler, aber wenn ich das Programm laufen nur die JFrame sichtbar ist .. JPanel ist nicht gezeigt ...

Pardon, wenn die Frage dumm ist .. im ein Anfänger ..

Vielen Dank im Voraus ...

Antwort

2

Verhalten des Codes nicht vorhersehbar ist, weil Sie Hauptregel der Swing-Entwicklung verletzen: alle UI Arbeit an Event Dispatch Thread getan werden sollte (EDT). Der Code sollte ungefähr so ​​aussehen:

public static void main(String args[]) { 
    SwingUtilities.invokeLater(new Runnable() { 
     void run() 
     { 
      JFrame z = new JFrame(); 
      z.add(new X()); // works only in java 6 
      //z.getContentPane().add(new X()); // works in any version of java 
      z.pack(); // assuming your pane has preferred size 
      z.setVisible(true); 

     } 
    }); 
} 

Mehr zu diesem Thema finden Sie hier: http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html

1

Ihr Code ist ziemlich verschleiert. Wie auch immer, statt

obj.add(pane); 

benötigen Sie

obj.getContentPane().add(pane); 
-1

Es klingt wie Sie ein Anfänger mit Swing sind. Die Verwendung der Bibliothek JXLayer macht das Übermalen von Komponenten jedoch extrem einfach und intuitiv

Überprüfen Sie ihre Demos und Beispielcode.

Ansonsten ist die ausgezeichnete JFreeChart eine großartige, kostenlose Java-Grafik (und Visualisierung) -Bibliothek