文本框和标签问题

时间:2011-03-17 12:31:27

标签: java swing textbox labels

我已经开始创建一个由几个标签组成的GUI。现在我专注于其中两个。 “池”选项卡和“热浴盆”选项卡。当我第一次开始时,我在泳池标签上得到了一切正常工作。所以我想,因为Hot Tub选项卡的所有标签和文本框位置都是相同的,我只需复制编码。好吧,我做了那个并尝试命名所有的标签和文本框,只是跟着它们后面的数字2。它不起作用。现在Hot Tub标签工作,但Pool选项卡没有,加上文本框消失了。我也有文本框的对齐问题,但我认为这与标签和文本框的命名有关,我不确定。

主要课程:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.text.SimpleDateFormat;

public class test extends JFrame implements ActionListener{
private JTabbedPane jtabbedPane;
private JPanel General;
private JPanel Pools;
private JPanel HotTub;

JTextField lengthText, widthText, depthText, volumeText;

public test(){
setTitle("Volume Calculator");
setSize(300, 200);

JPanel topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );

createGeneral();
createPools();

jtabbedPane = new JTabbedPane();
jtabbedPane.addTab("General", General);
jtabbedPane.addTab("Pool", Pools);
jtabbedPane.addTab("Hot Tub", HotTub);

topPanel.add(jtabbedPane, BorderLayout.CENTER);
              }
public void createGeneral(){
General = new JPanel();
General.setLayout( null );

JLabel dateLabel = new JLabel("Today's Date");
dateLabel.setBounds(10, 15, 150, 20);
General.add( dateLabel );

JFormattedTextField date = new JFormattedTextField(
java.util.Calendar.getInstance().getTime());
date.setEditable(false);
date.setBounds(90,15,150,20);
General.add(date);

JButton Close = new JButton("Close");
Close.setBounds(20,50,80,20);
Close.addActionListener(this);
Close.setBackground(Color.white);
General.add(Close);
                         }

/*        CREATE POOL        */

public void createPools(){
    Pools = new JPanel();
    Pools.setLayout( null );
JLabel lengthLabel = new JLabel("Length of pool (ft):");
    lengthLabel.setBounds(10, 15, 260, 20);
    Pools.add( lengthLabel );
lengthText = new JTextField();
    lengthText.setBounds(260, 15, 150, 20);
    Pools.add( lengthText );
JLabel widthLabel = new JLabel("Width of pool (ft):");
    widthLabel.setBounds(10, 60, 260, 20);
    Pools.add( widthLabel );
widthText = new JTextField();
    widthText.setBounds(260, 60, 150, 20);
    Pools.add( widthText );
JLabel depthLabel = new JLabel("Average Depth of pool (ft):");
    depthLabel.setBounds( 10, 100, 260, 20 );
    Pools.add( depthLabel );
depthText = new JTextField();
    depthText.setBounds(260, 100, 150, 20);
    Pools.add( depthText );
JLabel volumeLabel = new JLabel("The pool's volume is:(ft ^3");
    volumeLabel.setBounds(10, 200, 260, 20);
    Pools.add( volumeLabel );
    volumeText = new JTextField();
    volumeText.setBounds(260, 200, 150, 20);
    volumeText.setEditable(false);
Pools.add(volumeText); 

JButton calcVolume = new JButton("Calculate Volume");
    calcVolume.setBounds(150,250,150,20);
    calcVolume.addActionListener(this);
    calcVolume.setBackground(Color.white);
    Pools.add(calcVolume);

JButton Close = new JButton("Close");
    Close.setBounds(350,250,80,20);
    Close.addActionListener(this);
    Close.setBackground(Color.white);
    Pools.add(Close);
                       }


public void actionPerformed(ActionEvent event){
JButton button = (JButton)event.getSource();
String buttonLabel = button.getText();
if ("Close".equalsIgnoreCase(buttonLabel)){
Exit_pressed(); return;
    }
    if ("Calculate Volume".equalsIgnoreCase(buttonLabel)){
        Calculate_Volume(); return;
    }
        if ("Calculate Volume".equalsIgnoreCase(buttonLabel)){
            Calculate_Volume(); return;
    }
                                             }
private void Exit_pressed(){
System.exit(0);
                           }
private void Calculate_Volume(){
String lengthString, widthString, depthString;
    int length=0;
    int width=0;
    int depth=0;

lengthString = lengthText.getText();
widthString = widthText.getText();
depthString = depthText.getText();
if (lengthString.length() < 1 || widthString.length() < 1 || depthString.length() < 1 ){
    volumeText.setText("Enter All 3 Numbers"); return;
    }
        length = Integer.parseInt(lengthString);
        width = Integer.parseInt(widthString);
        depth = Integer.parseInt(depthString);
            if (length != 0 || width != 0 || depth != 0 ){
                volumeText.setText((length * width * depth) + "");
    } else{
        volumeText.setText("Enter All 3 Numbers"); return;
      }
                               }
public static void main(String[] args){
JFrame frame = new test();
frame.setSize(500, 350);
frame.setVisible(true);
}
}

HOT TUB CLASS:

import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionListener;

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

public abstract class HotTub extends JFrame implements ActionListener{
    private JTabbedPane jtabbedPane;
    private Component HotTub;

    {

    jtabbedPane = new JTabbedPane();
    jtabbedPane.addTab("Hot Tub", HotTub);
    JPanel HotTub;
    JTextField lengthText, widthText, depthText, volumeText;
    /*        CREATE HOT TUB        */


        HotTub = new JPanel();
        HotTub.setLayout( null );
    JLabel lengthLabel = new JLabel("Length of hot tub (ft):");
        lengthLabel.setBounds(10, 15, 260, 20);
        HotTub.add( lengthLabel );
    lengthText = new JTextField();
        lengthText.setBounds(260, 15, 150, 20);
        HotTub.add( lengthText );
    JLabel widthLabel = new JLabel("Width of hot tub (ft):");
        widthLabel.setBounds(10, 60, 260, 20);
        HotTub.add( widthLabel );
    widthText = new JTextField();
        widthText.setBounds(260, 60, 150, 20);
        HotTub.add( widthText );
    JLabel depthLabel = new JLabel("Average Depth of hot tub (ft):");
        depthLabel.setBounds( 10, 100, 260, 20 );
        HotTub.add( depthLabel );
    depthText = new JTextField();
        depthText.setBounds(260, 100, 150, 20);
        HotTub.add( depthText );
    JLabel volumeLabel = new JLabel("The hot tub's volume is:(ft ^3");
        volumeLabel.setBounds(10, 200, 260, 20);
        HotTub.add( volumeLabel );
        volumeText = new JTextField();
        volumeText.setBounds(260, 200, 150, 20);
        volumeText.setEditable(false);
    HotTub.add(volumeText); 

    JButton calcVolume = new JButton("Calculate Volume");
        calcVolume.setBounds(150,250,150,20);
        calcVolume.addActionListener((ActionListener) this);
        calcVolume.setBackground(Color.white);
        HotTub.add(calcVolume);

    JButton Close = new JButton("Close");
        Close.setBounds(350,250,80,20);
        Close.addActionListener((ActionListener) this);
        Close.setBackground(Color.white);
        HotTub.add(Close);
                           }
}

现在,Pool选项卡和Hot Tub选项卡都是相同的。无论我在哪个标签上,每个标签上都会显示相同的结果。这是一个命名问题吗?

2 个答案:

答案 0 :(得分:2)

  1. 这不应该属于同一类。
  2. 如果您的游泳池和热水浴缸标签非常相似,那么您正在复制代码。而是创建一个扩展JPanel的新类,并根据一些参数设置面板。 (或者甚至只是一个工厂方法。)然后将这些类中的两个添加到JTabbedPane,一个用于HotTub的参数,另一个用于Pool。
  3. 使用LayoutManagers。这将是值得学习的曲线,并将大大改善您的GUI。

答案 1 :(得分:1)

在createHotTub()方法中:

替换HotTub.add(lengthText); with HotTub.add(lengthText2);

替换HotTub.add(widthText); with HotTub.add(widthText2);

替换HotTub.add(depthText); with HotTub.add(depthText2);

替换HotTub.add(volumeText); with HotTub.add(volumeText2);