2017-03-18 39 views
-1

我正在创建计算某些形状的区域的程序。当我运行该程序时,选择一个形状并输入该区域的值,它会正确计算所有形状的面积。但是,如果我想在不关闭程序的情况下计算另一个形状的面积,它只会在上一个形状之后的框上添加而不是切换它们。我想知道是否有一种方法可以在更改形状时仅显示一组文本字段?我的代码如下:当更改组合框时显示文本字段

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,谢谢。这令人沮丧。完全相同的问题在两天内发布了3次,没有付出任何努力来实施已经提出的建议。 – camickr

相关问题