2016-08-26 10 views
-2

私は簡単な質問がありますが、なんらかの理由で私は固執してそれを理解できません。 JPanelに3つのボタンを持つ単純なコードを持っていますが、それぞれのボタンはJPanelにPaintComponentをオーバーライドして描画する必要がありますが、私は何をしたいのですか? (私はランダムな位置に変更した後に) お手数ですがありがとうございました!jPanelで3つの異なるオブジェクトを描画する3つのボタン

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Ex3 extends JFrame implements ActionListener 
{ 
    JButton circle, triang, square; 
    JPanel jp, jButton; 
    boolean drawSq, drawCir, drawTr; 
    public static void main(String[] args) 
    { 
     JFrame frame = new Ex3(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public Ex3() 
    { 
     super("Ex3"); 
     setSize(400, 500); 

     circle = new JButton("Circle"); 
     triang = new JButton("Triangle"); 
     square = new JButton("Square"); 
     drawCir = false; 
     drawSq = false; 
     drawTr = false; 
     //setLayout(new FlowLayout(FlowLayout.CENTER, 20, 30)); 

     jButton = new JPanel(); 
     jp = new CustomPanel(); 

     circle.addActionListener(this); 
     triang.addActionListener(this); 
     square.addActionListener(this); 

     jButton.add(circle); 
     jButton.add(triang); 
     jButton.add(square); 
     jButton.add(new JLabel("Kayy")); 

     jp.setBackground(Color.gray); 
     add(jp, BorderLayout.CENTER); 
     add(jButton, BorderLayout.NORTH); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     if(e.getSource() == circle) 
     { 
      drawCir = true; 
      System.out.println("created cricle"); 

     } 
     if(e.getSource() == triang) 
     { 
      drawTr = true; 
      System.out.println("created triangle"); 
     } 
     if(e.getSource() == square) 
     { 
      drawSq = true; 
      System.out.println("created square"); 
     } 
     repaint(); 
    } 

    class CustomPanel extends JPanel 
    { 

     @Override 
     public void paintComponent(Graphics g) 
     { 
      super.paintComponent(g); 
      if(drawSq) 
      { 
       g.setColor(Color.blue); 
       g.drawRect(((int)Math.random()* 20), 50, 200, 150); 
       drawSq = false; 
      } 
      else if(drawTr) 
      { 
       g.setColor(Color.green); 
      } 
      else if(drawCir) 
      { 
       g.setColor(Color.red); 
       g.drawOval(182, 124, 200, 200); 
      } 
      else 
      { 
      } 
      //drawSq = false; 
      drawTr = false; 
      drawCir = false; 
     } 

    } 
} 
+0

あなたは3つの図形を描いていないので、何をしたいですか? – gpasch

+0

他のボタンが押されたときにdrawRectまたはdrawOvalが保持されるように、図形を使用したくありません。 –

答えて

1

私は何をしたいの形状は

滞在次にあなたがシェイプにコンポーネントが再描画されるたびに再描画する必要が行うことです。

これを行うには、2つの一般的なアプローチがあります。BufferedImageの

    1. 塗料チェックアウト

    各オブジェクトをペイントするためにリストをペイントして反復処理するオブジェクトのリストを保持Custom Painting Approaches各アプローチの実際の例どのアプローチを使用するかは、あなたの正確な要件によって異なります。

    また、塗装方法でコンポーネントの状態を変更しないでください。 paintComponent()メソッドが呼び出されたときは制御できません。システムがコンポーネントを再描画することがあります。したがって、ブール変数の存在は設計上の問題を示しています。

  • 関連する問題