2016-04-30 13 views
0

JPanel に基本オブジェクトを描画しようとしていますが、動作していないようです。JavaをJPanelに描画する(デバッグ)

私は私が(ライトグレー1)へのJPanelを追加してい私のGUIのためのクラスを持って、私はpaintメソッド が

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); 

     } 

    } 

} 

と呼ばれている場所と間違って何かをやっている確信しています。 JPanel拡張クラス というコンテンツを使って図面を追加しようとしています。

私は灰色のJPanelを作成しているようですが、 の図面はちょっと小さな白い四角ですが、私はその理由が分かりません。

+0

オーバーライドのgetPreferredSizeを使用して、コンポーネント – MadProgrammer

+0

に適したサイズを返すつもりです別のJPanel の内側のJPanelを入れて面倒のあまりでした正直なところ私はあなたが何を意味するのかわからない – Trent

+0

'content'は' getPreferredSize'というメソッドを持つ 'JPanel'から拡張しています。あなたが' paint'をしたようにこのメソッドをオーバーライドし、適切なサイズを返す必要がありますコンポーネントの場合、それ以外の場合はデフォルトで '0x0'になります – MadProgrammer

答えて

1

だから、あなたcontentパネルは、したがって0x0のデフォルト優先サイズ、FlowLayout優等(少し余裕をもって)そのコンポーネントのpreferredSize、あなたはちょっといい小さな白い四角形を持っている理由があります。

私はちょうど完全に第二のJPanelを除外することを決定しました

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

誰かがダウン投票を説明できますか?答えはユーザーの質問に答えませんか?それは何か間違っていますか?私はそれがどのように改善されるかを学ぶことに興味があるだろう – MadProgrammer

0

例えば、contentパネルのgetPreferredSizeメソッドをオーバーライドして、適切なサイズを返すされて行う必要がありますどのような。 それはとても代わりに、私は唯一の私は、コンテンツの単一の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); 

    } 

    } 
関連する問題