2016-04-30 16 views
0

Ich versuche, ein grundlegendes Objekt zu einem JPanel zu zeichnen, obwohl es nicht zu funktionieren scheint.Java-Zeichnung zu einem JPanel (Debugging)

Ich bin sicher, dass ich etwas tue, falsch mit, wo die Farbe Methode ist

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

public class testGui { 

    static colors gc_colors; 
    static gui  gc_gui; 

    public static void main(String[] args) { 

     gc_colors = new colors(); 
     gc_gui = new gui(); 

     gc_gui.cv_frame.setVisible(true); 

    } 

    public static class colors { 

     Color cv_ltGrey; 
     Color cv_mdGrey; 
     Color cv_dkGrey; 

     public colors() { 

     cv_ltGrey = Color.decode("#DDDDDD"); 
     cv_mdGrey = Color.decode("#CCCCCC"); 
     cv_dkGrey = Color.decode("#111111"); 

     } 

    } 

    public static class gui { 

     JFrame cv_frame; 
     JPanel cv_panel; 
     JPanel cv_content; 

     public gui() { 

     cv_frame = new JFrame(); 
     cv_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     cv_frame.setTitle("Test GUI"); 
     cv_frame.setSize(600, 400); 
     cv_frame.setLayout(new FlowLayout()); 

     cv_panel = new JPanel(); 
     cv_panel.setBackground(gc_colors.cv_ltGrey); 
     cv_panel.setPreferredSize(new Dimension(500, 300)); 

     cv_frame.add(cv_panel); 

     cv_content = new content(); 
     cv_panel.add(cv_content); 

     } 

    } 

    public static class content extends JPanel { 

     public void paint(Graphics graphic) { 
     super.paint(graphic); 
     draw(graphic); 
     } 

     public void update() { 
     repaint(); 
     } 

     public void draw(Graphics graphic) { 

     Graphics2D graphic2D = (Graphics2D) graphic; 
     graphic2D.setPaint(gc_colors.cv_ltGrey); 
     graphic2D.fillRect(10, 10, 100, 100); 

     } 

    } 

} 

Ich habe für meine gui eine Klasse genannt zu werden, die ich ein JPanel bin Zugabe zu (ein helles Grau eins). Welches ich dann versuche, meine Zeichnung zu einer erweiterten JPanel Klasse namens Inhalt hinzuzufügen.

Wenn ich es zwar laufen lasse, scheint es das graue JPanel zu schaffen, das ich will, aber die Zeichnung ist nur ein kleines weißes Quadrat und ich bin nicht sicher, warum.

+0

Aufschalten getPreferredSize von Inhalten verwenden werde und eine geeignete Größe für die Komponente zurückgeben – MadProgrammer

+0

Ich bin werde ehrlich sein Ich habe keine Ahnung, was du meinst – Trent

+0

'Inhalt' erstreckt sich von 'JPanel', die eine Methode namens' getPreferredSize' hat, müssen Sie diese Methode überschreiben, wie Sie die 'Farbe', und geben Sie eine entsprechende Größe zurück für die Komponente, sonst ist es standardmäßig '0x0' – MadProgrammer

Antwort

1

Also, Sie content Panel verfügt über eine Standard bevorzugte Größe von 0x0, FlowLayout ehrt die preferredSize seine Komponenten (mit einer kleinen Marge), daher auch der Grund, warum man ein nettes kleines kleines weißes Rechteck hat.

Was müssen Sie ist die getPreferredSize Methode des content Panel tun außer Kraft setzen und eine geeignete Größe zurück, zum Beispiel

Example

public static class content extends JPanel { 

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

    public void paint(Graphics graphic) { 
     super.paint(graphic); 
     draw(graphic); 
    } 

    public void update() { 
     repaint(); 
    } 

    public void draw(Graphics graphic) { 

     Graphics2D graphic2D = (Graphics2D) graphic; 
     graphic2D.setPaint(gc_colors.cv_ltGrey); 
     graphic2D.fillRect(10, 10, 100, 100); 

    } 

} 
+1

Kann jemand die down vote erklären? Beantwortet die Antwort die Frage des Nutzers nicht? Tut es etwas falsch? Ich wäre daran interessiert zu erfahren, wie es verbessert werden könnte – MadProgrammer

0

Ich habe beschlossen, nur insgesamt die zweite JPanel auslassen . Es war zu viel Aufwand innerhalb eines anderen JPanel die JPanel setzen so stattdessen ich nur eine einzige JPanel

public static class gui { 

    JFrame cv_frame; 
    JPanel cv_panel; 
    JPanel cv_content; 

    public gui() { 

    cv_frame = new JFrame(); 
    cv_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    cv_frame.setTitle("Test GUI"); 
    cv_frame.setSize(600, 400); 
    cv_frame.setLayout(new FlowLayout()); 

    cv_content = new content(); 
    cv_content.setBackground(gc_colors.cv_ltGrey); 
    cv_content.setPreferredSize(new Dimension(500, 300)); 
    cv_frame.add(cv_content); 

    } 

    }