2017-03-18 5 views
-1

特定の図形の面積を計算するプログラムを作成中です。プログラムを実行すると、図形を選択してその領域の値を入力すると、すべての図形の面積が正しく計算されます。しかし、プログラムを閉じずに別のシェイプの面積を計算したければ、前のシェイプの後のボックスを切り換えずに追加するだけです。シェイプを変更するときにテキストフィールドの1つのセットしか表示されないようにする方法があるかどうか疑問に思っていましたか?私のコードは以下の通りです:ComboBoxが変更されたときのTextFieldの表示

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class MainPanel extends JPanel implements ActionListener { 

JComboBox shapeList; 

JTextField answer; 
JTextField shapeSelected; 
JTextField circle; 
JTextField square; 
JTextField triangle; 
JTextField triangle3; 

JLabel circle2; 
JLabel square2; 
JLabel triangle2; 
JLabel triangle4; 
JLabel triangle5; 
JLabel squareAnswer; 
JLabel circleAnswer; 
JLabel triangleAnswer; 

JButton compute; 

MainPanel() 
{ 
    String [] shapes = {"circle", "square", "triangle"}; 

    shapeList = new JComboBox(shapes); 
    shapeList.addActionListener(this); 
    add(shapeList); 

    compute = new JButton("Compute"); 
    compute.addActionListener(this); 
    add(compute); 
} 

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

    if (o == shapeList) 
    { 
     if (shapeList.getSelectedItem().equals("circle")) 
     { 
      circle2 = new JLabel(); 
      circle2.setText("Radius:"); 
      add(circle2); 

      circle = new JTextField(10); 
      add(circle); 

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

     if (shapeList.getSelectedItem().equals("square")) 
     { 
      square2 = new JLabel(); 
      square2.setText("Width/Height:"); 
      add(square2); 

      square = new JTextField(10); 
      add(square); 

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

     if (shapeList.getSelectedItem().equals("triangle")) 
     { 
      triangle4 = new JLabel(); 
      triangle4.setText("Base:"); 
      add(triangle4); 

      triangle = new JTextField(10); 
      add(triangle); 

      triangle5 = new JLabel(); 
      triangle5.setText("Height:"); 
      add(triangle5); 

      triangle3 = new JTextField(10); 
      add(triangle3); 

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

    if (o == compute) 
    { 
     if (shapeList.getSelectedItem().equals("square")) 
     { 
      squareAnswer = new JLabel(); 
      squareAnswer.setText("Area:"); 
      add(squareAnswer); 

      answer = new JTextField(10); 
      add(answer); 

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

      double sum = Double.parseDouble(square.getText()) * Double.parseDouble(square.getText()); 
      answer.setText(String.valueOf(sum)); 
     } 

     if (shapeList.getSelectedItem().equals("triangle")) 
     { 
      triangleAnswer = new JLabel(); 
      triangleAnswer.setText("Area:"); 
      add(triangleAnswer); 

      answer = new JTextField(10); 
      add(answer); 

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

      double sum = (Double.parseDouble(triangle.getText()) * Double.parseDouble(triangle3.getText()))/2; 
      answer.setText(String.valueOf(sum)); 
     } 

     if (shapeList.getSelectedItem().equals("circle")) 
     { 
      circleAnswer = new JLabel(); 
      circleAnswer.setText("Area:"); 
      add(circleAnswer); 

      answer = new JTextField(10); 
      add(answer); 

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

      double sum = (Double.parseDouble(circle.getText()) * Double.parseDouble(circle.getText())) * Math.PI; 
      answer.setText(String.valueOf(sum)); 
     } 
    } 
} 
} 

答えて

2

CardLayoutを使用してください。コンボボックスからシェイプを選択すると、指定したシェイプのパネルが入れ替わります。

詳細と作業例については、How to Use CardLayoutのSwingチュートリアルのセクションをお読みください。

コンボボックスで項目が選択されたときのパネルの振る舞いの例を示します。

+0

[お願い](http://stackoverflow.com/questions/42916940/hiding-text-fields-with-setvisible) –

+1

@HovercraftFullOfEels、ありがとう。それはイライラしています。まったく同じ質問が2日で3回転記されました。 – camickr

関連する問題