2017-03-23 11 views
0

これは私の初めての投稿です。親切であり、何か提案を修正することを忘れないでください!JbuttonsをコンボボックスでJavaのswitch文の中で使う方法

シェイプを描画するプログラムを作成しようとしています。一度に1つの選択、円、正方形、または三角形のみを表示するプログラムが必要です。 "Draw a .."オプションをクリックすると、対応するシェイプのみが高さまたは半径で側面に表示されます。形状は固定サイズですが、ラベルはユーザーの入力内容を反映する必要があります。

しかし、switch文を使用して切り替えます。私のスイッチはすべてを一度に表示しています!どうすれば修正できますか?ここで

は私のコードです:

import java.awt.event.ActionEvent; 
import java.awt.Graphics; 
import java.awt.Color; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import java.awt.event.ActionListener; 
import javax.swing.JComboBox; 

public class MainPanel extends JPanel implements ActionListener{ 


      JTextField num1; 
      JTextField num2; 
      JTextField num3; 
      JTextField num4; 
      JLabel equals; 
      JTextField answer; 
      JLabel labelTxt; 
      JComboBox shapeList; 
      JButton drawAThing; 
      JLabel radiusLabel; 
      JLabel base; 
      JLabel lengthLabel; 
      JLabel height; 
      JButton drawACircle; 
      JButton drawASquare; 
      JButton drawATriangle; 

    MainPanel(){ 

     String [] shapes = {"circle", "square", "triangle"}; 
     shapeList = new JComboBox(shapes); 
     shapeList.setSelectedIndex(2); 
     shapeList.addActionListener(this); 
     add(shapeList); 


    } 

      @Override 
    public void actionPerformed(ActionEvent e) { 
     Object o = e.getSource(); 
     Object a = e.getSource(); 

     if (o == shapeList){ 
      JComboBox cb = (JComboBox)e.getSource(); 
      String msg = (String)cb.getSelectedItem(); 


      switch(msg){ 
      case "circle": 
       radiusLabel = new JLabel(); 
       radiusLabel.setText("Radius: "); 
       add(radiusLabel); 

       num1 = new JTextField(12); 
       add(num1); 


       drawACircle = new JButton("Draw a circle "); 
       drawACircle.addActionListener(this); 
       add(drawACircle); 

       if (a == drawACircle){ 

        drawACircleThing(); 
        remove(drawACircle); 

        this.revalidate(); 
        this.repaint(); 
        } 



       break; 

      case "square": 
        lengthLabel = new JLabel(); 
        lengthLabel.setText("Side Length: "); 
        add(lengthLabel); 

        num2 = new JTextField(12); 
        add(num2); 


        drawASquare = new JButton("Draw a square "); 
        drawASquare.addActionListener(this); 
        add(drawASquare); 

        if (a == drawASquare){ 

        drawASquareThing(); 
        remove(drawASquare); 

        this.revalidate(); 
        this.repaint(); 
        } 

       break; 

      case "triangle": 
        base = new JLabel(); 
        base.setText("Base: "); 
        add(base); 

        num3 = new JTextField(12); 
        add(num3); 

        height = new JLabel(); 
        base.setText("height: "); 
        add(height); 

        num4 = new JTextField(12); 
        add(num4); 


        drawATriangle = new JButton("Draw a triangle "); 
        drawATriangle.addActionListener(this); 
        add(drawATriangle); 

        if (a == drawATriangle){ 

         drawATriangleThing(); 

        remove(drawATriangle); 

        this.revalidate(); 
        this.repaint(); 

        } 

        break; 


       default: 
        break; 

     } 
    } 
    } 

      @Override 
public void paintComponent(Graphics g) 
{ 
    g.setColor(Color.BLUE); 
    g.fillRect(50, 50, 200, 200); 
    g.fillOval(100,100,200,200); 

} 
private void drawASquareThing() 
{ 
    Graphics g = getGraphics(); 
    g.setColor(Color.green); 
    g.fillRect(150,100,330,200);  
    g.drawString("My square", 50, 10); 

} 
private void drawATriangleThing() 
{ 
    Graphics g = getGraphics(); 
    g.setColor(Color.yellow); 
    g.fillRect(150,100,330,200);  
     g.drawString("My Triangle", 50, 10); 

} 

public void drawACircleThing() 
{ 
    Graphics g = getGraphics(); 
    g.setColor(Color.ORANGE); 

    int [] xPoints = {50, 50, 100}; 
    int [] yPoints = {50, 100, 100}; 

    g.drawPolygon(xPoints, yPoints, 3); 
    g.fillPolygon(yPoints, xPoints, 3); 

} 


} 

私の新しいコード:

import java.awt.event.ActionEvent; 
import java.awt.Graphics; 
import java.awt.Color; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import java.awt.event.ActionListener; 
import javax.swing.JComboBox; 

public class MainPanel extends JPanel implements ActionListener{ 


      JTextField num1; 
      JTextField num2; 
      JTextField num3; 
      JTextField num4; 

      JTextField answer; 
      JLabel labelTxt; 
      JComboBox shapeList; 
      JButton drawAThing; 
      JLabel radiusLabel; 
      JLabel base; 
      JLabel lengthLabel; 
      JLabel height; 
      JButton drawACircle; 
      JButton drawASquare; 
      JButton drawATriangle; 

    MainPanel(){ 

     String [] shapes = {"circle", "square", "triangle"}; 
     shapeList = new JComboBox(shapes); 
     shapeList.setSelectedIndex(2); 
     shapeList.addActionListener(this); 
     add(shapeList); 

    setVisible(true); 


    } 

      @Override 
    public void actionPerformed(ActionEvent e) { 
     Object o = e.getSource(); 
     Object a = e.getSource(); 

     if (o == shapeList){ 
      JComboBox cb = (JComboBox)e.getSource(); 
      String message = (String)cb.getSelectedItem(); 


      switch(message){ 
      case "circle": 

       radiusLabel = new JLabel(); 
       radiusLabel.setText("Radius: "); 
       add(radiusLabel); 

       num1 = new JTextField(12); 
       add(num1); 
       int radiusSize = Integer.parseInt(num1.getText()); 
       this.revalidate(); 
       drawACircle = new JButton("Draw a circle "); 
       drawACircle.addActionListener(this); 
       add(drawACircle); 

       if (a == drawACircle){ 

        drawACircleThing(radiusSize); 

        } 

        this.repaint(); 

       break; 

      case "square": 

        lengthLabel = new JLabel(); 
        lengthLabel.setText("Side Length: "); 
        add(lengthLabel); 

        num2 = new JTextField(12); 
        add(num2); 
        int lengthSize = Integer.parseInt(num2.getText()); 
        this.revalidate(); 
        drawASquare = new JButton("Draw a square "); 
        drawASquare.addActionListener(this); 
        add(drawASquare); 


        if (a == drawASquare){ 

        drawASquareThing(lengthSize); 


        } 

        this.repaint(); 

       break; 

      case "triangle": 

        base = new JLabel(); 
        base.setText("Base: "); 
        add(base); 


        num3 = new JTextField(12); 
        add(num3); 
        int baseSize = Integer.parseInt(num3.getText()); 

        height = new JLabel(); 
        base.setText("height: "); 
        add(height); 

        num4 = new JTextField(12); 
        add(num4); 
        int heightSize = Integer.parseInt(num4.getText()); 
        this.revalidate(); 
        drawATriangle = new JButton("Draw a triangle "); 
        drawATriangle.addActionListener(this); 
        add(drawATriangle); 

        if (a == drawATriangle){ 

         drawATriangleThing(baseSize, heightSize); 

        } 

        this.repaint(); 

        break; 

       default: 
        break; 

     } 
    } 
} 

@Override 
public void paintComponent(Graphics g) //The last thing that is called and passed by java run time environment of Graphics g. It let’s us draw on the screen. 
{ 
g.setColor(Color.BLUE); // NEED an import. Don’t need to know all the colors. 
g.fillRect(50, 50, 200, 200); 
g.fillOval(100,100,200,200); 

} 
private void drawASquareThing(int lengthSize) 
{ 
    Graphics g = getGraphics(); 
     g.setColor(Color.PINK); 
     g.drawRect(lengthSize, 45, 25, 35); 
     g.drawString("My Square", 30, 23);   
} 
private void drawATriangleThing(int baseSize, int heightSize) 
{ 

    Graphics g = getGraphics(); 
    g.setColor(Color.GREEN); 
    g.fillRect(60,79,809,400); 
     g.drawRect(baseSize, baseSize, heightSize, heightSize); 
     g.drawString("My Triangle", baseSize, heightSize); 

} 

public void drawACircleThing(int radiusSize) 
{ 
    Graphics g = getGraphics(); 
    g.setColor(Color.ORANGE); 

    int [] xPoints = {50, 50, 100}; 
    int [] yPoints = {50, 100, 100}; 

    g.drawPolygon(xPoints, yPoints, radiusSize); 
    g.fillPolygon(yPoints, xPoints, 3); 

} 


} 

答えて

0

カスタムペイントを行う上で、よりスイングのチュートリアルを行う必要があります。しかし、基本的には、paintComponentメソッドですべてを行うべきであり、他のメソッドでは、paintComponentで使用される変数/パラメータを設定する必要があります。たとえば、(あなたのコードを使用して)それと

  @Override 
public void paintComponent(Graphics g) 
{ 
    g.setColor(Color.BLUE); 
    if (fillSquareFlag) g.fillRect(50, 50, 200, 200); 
    if (fillCircleFlag) g.fillOval(100,100,200,200); 

} 

、あなたが

public void actionPerformed(ActionEvent ae) { 
    fillSquareFlag = !fillSquareFlag; 
    repaint(); 
} 
+0

のようなあなたのボタンのためのあなたのボタンアクションを設定することができ、私はfillSquareFlagを追加しようとしたが、それは何ですか?ブール演算子ですか?私はそれをdrawATriangleThing(baseSize、heightSize)の下に追加しますか?私はいつもdrawメソッドを呼び出そうとしていますか? – Milesofsmiles

+0

私は本当に私のスイッチの文が動作したい:) – Milesofsmiles

関連する問題