我已经开始创建一个由几个选项卡组成的GUI。现在,我专注于其中两个。池选项卡和热水浴缸选项卡。刚开始时,我在“池”选项卡上一切正常。因此,我想到了,因为“热浴盆”选项卡的所有标签和文本框放置都相同,所以我只需要复制编码即可。好吧,我这样做了,并尝试将所有标签和文本框都命名为相同,只是后面跟着数字2。没用现在,“热水浴缸”选项卡可以使用,但“池”选项卡不起作用,并且文本框也消失了。文本框也存在对齐问题,但是我不确定这与标签和文本框的命名有关。
主要类别:
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);
}
}
热管类:
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);
}
}
现在,“池”选项卡和“热水浴缸”选项卡都相同。无论我在哪个选项卡上,每个选项卡上都会显示相同的结果。这是命名问题吗?
最佳答案
在createHotTub()方法中:
替换HotTub.add(lengthText);与HotTub.add(lengthText2);
替换HotTub.add(widthText);与HotTub.add(widthText2);
替换HotTub.add(depthText);与HotTub.add(depthText2);
替换HotTub.add(volumeText);与HotTub.add(volumeText2);