2011-03-17 13 views
0

私はいくつかのタブで構成されてGUIを作成するために始めました。今私はそれらの2つに焦点を合わせています。 [プール]タブおよび[ホットタブ]タブ。私が最初に始めたとき、私はプールタブでうまく動作するようにすべてを得ました。だから私はすべてのラベルとテキストボックスの配置は、ホットタブのタブのために私はちょうどコーディングをコピーすると同じだろうと思った。さて、私はそれをして、すべてのラベルとテキストボックスの後に番号2を付けて同じ名前をつけてみました。動いていない。これでHot Tubタブは機能しますが、Poolタブは表示されず、テキストボックスも表示されなくなりました。私はあまりにもテキストボックスとの整合の問題を抱えているが、私はそれがラベルとテキストボックスの命名に関係していると思うが、私はわかりません。テキストボックスとラベルを発行

MAIN CLASS:

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); 
          } 
} 

今プール]タブとホットタブタブの両方が同じです。どんなタブであっても、同じ結果が各タブに表示されます。それは命名の問題ですか?

+2

ここをクリックすると多くのコードがあります –

+0

コードのいくつかを削除して関連ビットのみを入れてみてください。 – jjnguy

+0

私はいくつかを削除し、クラスを分離しましたが、私はそれが正しいとは思わないです。私の元の投稿を見てください。ありがとう – Mike

答えて

1

HotTub.add(lengthText)を置き換えます。 HotTub.add(lengthText2);

HotTub.add(widthText);を置き換えます。 HotTub.add(widthText2);

は、HotTub.add(depthText)を置き換えます。 HotTub.add(depthText2);

HotTub.add(volumeText)を置き換えます。 HotTub.add(volumeText2);

2
  1. これは、すべて一つのクラスであってはなりません。
  2. あなたのプールとホットタブのタブを使用すると、コードをコピーしているように類似している場合。代わりにJPanelを拡張し、いくつかのパラメータに基づいてパネルを設定する新しいクラスを作成します。 (あるいは単にファクトリメソッド。)その後のJTabbedPane、HotTubやプールの他のパラメータを持つものに、これらのクラスのうちの2つを追加します。
  3. 使用LayoutManagers。学習曲線の価値があり、GUIが大幅に改善されます。 createHotTub()メソッドで
関連する問題