我已经开始创建一个由几个标签组成的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选项卡都是相同的。无论我在哪个标签上,每个标签上都会显示相同的结果。这是一个命名问题吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
替换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);