2016-05-08 2 views
-1

シェイプとボタンが含まれているパネルを作成しようとしています。問題は、JPanelにボタンを追加すると、シェイプが表示されないということです。それは単に私の画面の上部にボタンを表示します。四角形は、パネルではなく枠に四角形を追加すると表示されますが、ボタンは表示されません。JButtonをJPanelに追加するとシェイプが表示されない

public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 
    JPanel panel = new JPanel(); 
    //Replace FRAME_WIDTH/HEIGHT with a number greater than 100 
    frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); 
    frame.setTitle("Square Game"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Creates a Red Square from RedSquare 
    final RedSquare red = new RedSquare(); 
    panel.add(red); 

    JButton button = new JButton(); 
    button.setText("Red"); 
    panel.add(button); 

    frame.add(panel); 

    frame.setVisible(true); 

} 

public class RedSquare extends JComponent 
{ 
private Square sq; 
private int x = 100; 
private int y = 0; 
private Graphics2D g2; 

public RedSquare() 
{ 
    sq = new Square(x,y,Color.red); 
} 

public void paintComponent(Graphics g) 
{ 
    Graphics2D g2 = (Graphics2D) g; 
    sq.draw(g2); 
} 

public int getX() 
{ 
    return x; 
} 

public int getY() 
{ 
    return y; 
} 

public void moveBy() 
{ 
    y++; 
    sq = new Square(x,y,Color.red); 
    repaint(); 
} 
} 

public class Square 
{ 
private int x; 
private int y; 
private Color color; 

public Square(int x, int y, Color color) 
{ 
    this.x = x; 
    this.y = y; 
    this.color = color; 
} 

public void draw(Graphics2D g2) 
{ 
    Rectangle body = new Rectangle(x, y, 40, 40); 
    g2.draw(body); 
    g2.setPaint(color); 
    g2.fill(body); 
    g2.draw(body); 
} 
} 

この作業を行うには別の操作が必要ですか?何か不足していますか?私はこれに新しいですし、どんな助けも大歓迎です。

+0

はい:あなたはレイアウトなどを使用することができます

越え。 JButton用のJPanelを作成し、別のJPanelから別の描画パネルを作成します。 –

+0

すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 'RedSquare'は単なるグラフィックオブジェクトではなく、' JComponent'です。それはあなたが望むような方法で「積み重ね」られないことを意味します。 –

+1

ああ、今は 'FlowLayout'に追加されているのがわかります..' RedSquare'は 'getPreferredSize()'メソッドをオーバーライドしていますか?ああ、心配しないでください.. MCVEはすべてを(私達は知る必要がある)教えてくれるでしょう。 –

答えて

0

panel.setLayout(new FlowLayout())を使用してパネルでレイアウトを設定する必要があると思います。パネルに何かを追加する前に、両方の図形を表示するようにします。今のところそれが優先されています。

0

JFrameにコンポーネントを追加するときは、addではなくsetContentPaneを使用してみます。上記の例から、frame.add(panel);を削除し、frame.setContentPane(panel);

0

という抽象的なJComponentを拡張していることは珍しいことですが、禁止されているわけではありません。

解決策の1つは、JComponentではなくJPanelを使用することです。

また、x座標をx = 0に設定すると、正方形が表示されます。

panel.setLayout(new BorderLayout()); 

.... 


panel.add("Center", red); 


....... 

panel.add("South", button); 
関連する問題