2016-04-16 14 views
0

Ich habe gerade angefangen Java zu lernen und lerne jetzt neue Dinge außerhalb der Konsole. Ich habe einen Code vom Vorstand des Professors kopiert, aber ich kann es nicht zur Arbeit bringen. Es soll jetzt Kreise und Rechtecke zeichnen, aber ich bekomme nur ein leeres Fenster wenn ich versuche zu malen. Ich denke, ich habe vielleicht eine Zeile Code oder etwas verpasst. Ich benutze Eclipse auf Mac.Java Code Painting in JPanel

Ich verstehe, es gibt viele Möglichkeiten, dies zu tun, aber ich möchte den Code genau halten, wie er es für jetzt zusätzlich mit was auch immer repariert, die Sie denken, wird es funktionieren. Danke vielmals.

import java.awt.*; 
import java.awt.geom.*; 
import javax.swing.*; 

public class Bunny { 
    public static void main(String [] args) 
    { 
     MyFrame f = new MyFrame(); 
    f.setSize(500,400); 
    f.setVisible(true); 
    f.setLocation(50,100); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
    } 






import java.awt.*; 
import java.awt.geom.*; 
import javax.swing.*; 

public class MyFrame extends JFrame 
    { 
     public MyFrame() 
     { 
     } 
    } 



import java.awt.*; 
import java.awt.geom.*; 
import javax.swing.*; 


public class MyPanel extends JPanel 
{ 
public void paintComponent(Graphics g) 
{Graphics2D g2 = (Graphics2D) g; 


Ellipse2D.Double Circle = new Ellipse2D.Double(100,50,75,75); 

g2.setColor(Color.RED); 
g2.fill(Circle); 

Rectangle box = new Rectangle(200,100,150,150); 
g2.setColor(Color.RED); 
g2.fill(box); 

Color myColor = new Color(255,0,0); 
} 
} 
+0

Schreiben Sie den Code in die 'jbInit()'. –

Antwort

3

Ich mag, sehr viel, Ihren Professor sagen, dass sie wieder zur Schule gehen und lernen, wie Schaukel richtig nutzen

Sie durch einen Blick auf Painting in AWT and Swing und Performing Custom Painting für starten sollten weitere Informationen darüber, wie Malerarbeiten in Swing

Example

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Ellipse2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(400, 400); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2 = (Graphics2D) g.create(); 
      Ellipse2D.Double Circle = new Ellipse2D.Double(100, 50, 75, 75); 

      g2.setColor(Color.RED); 
      g2.fill(Circle); 

      Rectangle box = new Rectangle(200, 100, 150, 150); 
      g2.setColor(Color.RED); 
      g2.fill(box); 
      g2.dispose(); 
     } 

    } 

} 

Code Review ...

Fehler: Interaktion mit der Benutzeroberfläche von außerhalb des Kontexts des Event Dispatching Thread. Siehe Initial Threads für Details

public class MyFrame extends JFrame { 

    public MyFrame() { 
    } 
} 

Bad: sich von einem Top-Level-Container (wie JFrame) wird im Allgemeinen davon abhalten, sind Sie nicht das Hinzufügen alle neuen Funktionen der Klasse, und dies ist einer der Bereiche, in denen die meisten Probleme auftreten . Vielleicht möchten Sie etwas über "Komposition über Vererbung" recherchieren.

Sie fügen dem Rahmen auch nichts hinzu, sodass er leer erscheint.

public class MyPanel extends JPanel { 

    public void paintComponent(Graphics g) { 
     Graphics2D g2 = (Graphics2D) g; 

     Ellipse2D.Double Circle = new Ellipse2D.Double(100, 50, 75, 75); 

     g2.setColor(Color.RED); 
     g2.fill(Circle); 

     Rectangle box = new Rectangle(200, 100, 150, 150); 
     g2.setColor(Color.RED); 
     g2.fill(box); 

     Color myColor = new Color(255, 0, 0); 
    } 
} 

Bad: paintComponent nie public sein sollte, gibt es keinen Grund, jemals, dass jede andere Klasse sollte diese Methode anrufen. Kein Anruf super.paintComponent verursacht kein Ende der Grafik Störungen und Probleme, sollten Sie immer super.paintComponent zuerst anrufen. Die einzigen Zeiten, die du nicht tun würdest, wenn du weißt, was du tust, und du hast einen extrem guten Grund, nicht ... das ist wie < 1% der Zeit.

+0

dam danke viel mann, ja er ist nicht mein idealer lehrer, aber hes alles was ich habe. –