2011-08-23 87 views
-1
import java.io.*; 
import javax.swing.*; 

import java.awt.event.*; 
import java.awt.*; 
import java.text.DecimalFormat; 

public class Final extends JFrame 
{ 
private JButton calcButton, exitButton; 
private JButton pcalcButton, pexitButton; 
private JTextField plength, pwidth, pdepth, pvolume; 
private JTextField hlength, hwidth, hdepth, hvolume; 
private JLabel lengthLabel, widthLabel, depthLabel, volumeLabel; 
private JRadioButton roundrButton, ovalrButton; 

public Final() 
{ 
super("Final"); 

JTabbedPane tab = new JTabbedPane(); 
// constructing the first panel 
JPanel p1 = new JPanel(new GridLayout(5,1)); 
pcalcButton = new JButton("Calculate Volume"); 
pexitButton = new JButton("Exit"); 
plength = new JTextField(5); 
pwidth = new JTextField(5); 
pdepth = new JTextField(5); 
pvolume = new JTextField(5); 
lengthLabel = new JLabel("Enter the pool's length (ft):"); 
widthLabel = new JLabel("Enter the pool's width (ft):"); 
depthLabel = new JLabel("Enter the pool's depth (ft):"); 
volumeLabel = new JLabel("The pool's volume (ft^3):"); 
p1.add(lengthLabel); 
p1.add(plength); 
p1.add(widthLabel); 
p1.add(pwidth); 
p1.add(depthLabel); 
p1.add(pdepth); 
p1.add(volumeLabel); 
p1.add(pvolume); 
p1.add(pcalcButton); 
p1.add(pexitButton); 
tab.addTab("Pools", null, p1, " Panel #1"); 

calcButtonHandler chandler =new calcButtonHandler(); 
pcalcButton.addActionListener(chandler); 
exitButtonHandler ehandler =new exitButtonHandler(); 
pexitButton.addActionListener(ehandler); 
FocusHandler fhandler =new FocusHandler(); 
plength.addFocusListener(fhandler); 
pwidth.addFocusListener(fhandler); 
pdepth.addFocusListener(fhandler); 
pvolume.addFocusListener(fhandler); 

// constructing the second panel 
JPanel p2 = new JPanel(new GridLayout(6,1)); 
ButtonGroup tubtype = new ButtonGroup(); 
roundrButton = new JRadioButton("Round", true); 
roundrButton.setActionCommand("round"); 
tubtype.add(roundrButton); 
ovalrButton = new JRadioButton("Oval", false); 
ovalrButton.setActionCommand("oval"); 
tubtype.add(ovalrButton); 
calcButton = new JButton("Calculate Volume"); 
exitButton = new JButton("Exit"); 
hlength = new JTextField(5); 
hwidth = new JTextField(5); 
hdepth = new JTextField(5); 
hvolume = new JTextField(5); 
lengthLabel = new JLabel("Enter the tub's length (ft):"); 
widthLabel = new JLabel("Enter the tub's width (ft):"); 
depthLabel = new JLabel("Enter the tub's depth (ft):"); 
volumeLabel = new JLabel("The tub's volume (ft^3):"); 
p2.add(roundrButton); 
p2.add(ovalrButton); 
p2.add(lengthLabel); 
p2.add(hlength); 
p2.add(widthLabel); 
p2.add(hwidth); 
p2.add(depthLabel); 
p2.add(hdepth); 
p2.add(volumeLabel); 
p2.add(hvolume); 
p2.add(calcButton); 
p2.add(exitButton); 
tab.addTab("Hot Tubs", null, p2, " Panel #1"); 

calcButtonHandler2 ihandler =new calcButtonHandler2(); 
calcButton.addActionListener(ihandler); 
exitButtonHandler ghandler =new exitButtonHandler(); 
exitButton.addActionListener(ghandler); 
FocusHandler hhandler =new FocusHandler(); 
hlength.addFocusListener(hhandler); 
hwidth.addFocusListener(hhandler); 
hdepth.addFocusListener(hhandler); 
hvolume.addFocusListener(hhandler); 

// add JTabbedPane to container 
getContentPane().add(tab); 
setSize(550, 500); 
setVisible(true); 
} 
public class calcButtonHandler implements ActionListener { 
public void actionPerformed(ActionEvent e) { 
    DecimalFormat num =new DecimalFormat(",###.##"); 
    double sLength, sWidth, sdepth, Total; 

    sLength = Double.parseDouble(plength.getText()); 

    sWidth = Double.parseDouble(pwidth.getText()); 

    sdepth = Double.parseDouble(pdepth.getText()); 

    if(e.getSource() == pcalcButton) { 
     Total = sLength * sWidth * sdepth; 
     pvolume.setText(num.format(Total)); 
     try{ 
      String value=pvolume.getText(); 
      File file = new File("output.txt"); 
      FileWriter fstream = new FileWriter(file,true); 
      BufferedWriter out = new BufferedWriter(fstream); 
      out.write("Length= "+sLength+", Width= "+sWidth+", Depth= "+sdepth+" so the volume of Swimming Pool is "+value); 
      out.newLine(); 
      out.close(); 
     } 
     catch(Exception ex){} 
    } 
} 
} 

public class calcButtonHandler2 implements ActionListener { 
public void actionPerformed(ActionEvent g) { 
    DecimalFormat num =new DecimalFormat(",###.##"); 
    double cLength, cWidth, cdepth, Total; 

    cLength = Double.parseDouble(hlength.getText()); 

    cWidth = Double.parseDouble(hwidth.getText()); 

    cdepth = Double.parseDouble(hdepth.getText()); 

    try 
    { 

     if(roundrButton.isSelected())//**roundrButton cannot be resolved 
     { 
      Total = Math.PI * Math.pow(cLength/2.0, 2) * cdepth; 
     } 
     else 
    { 
      Total = Math.PI * Math.pow(cLength * cWidth, 2) * cdepth; 
    } 
     hvolume.setText(""+num.format(Total)); 
    } 
catch(Exception ex){} 
} 
} 
} 



public class exitButtonHandler implements ActionListener { //**The public type exitButtonHandler must be defined in its own file 
    public void actionPerformed(ActionEvent g){ 
     System.exit(0); 
    } 
} 
public class FocusHandler implements FocusListener { //**The public type FocusHandler must be defined in its own file 
    public void focusGained(FocusEvent e) { 
    } 
    public void focusLost(FocusEvent e) { 
    } 


public static void main(String args[]) 
{ 
    Final tabs = new Final(); 
    tabs.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

} 

我得到3個錯誤,在線旁邊用//**表示。請幫我弄清楚我遇到的問題。初始化故障

+0

最後兩個錯誤是不言自明的,不是嗎?你必須把每個類放到他們自己的文件中。並不是你的[上一個問題]解決roundrButton問題(http://stackoverflow.com/questions/7130300/java-initialization-question)? – JJJ

回答

1

更改calcButtonHandler2定義以接受對其定義位置的roundButton引用。

public class calcButtonHandler2 implements ActionListener { 

    private final JRadioButton roundrButton; 

    public calcButtonHandler(JRadioButton roundrButton) 
    { 
     this.roundrButton= roundrButton; 
    } 
    .... 
} 

,並通過在參考當你創建的calcButtonHandler2

calcButtonHandler chandler =new calcButtonHandler(roundrButton); 

至於最後兩個錯誤的情況下,移動類聲明,以單獨的文件由編譯錯誤叫出或刪除公開關鍵字從他們的定義(我會推薦第一種方法)。

+0

謝謝,真的幫了我。 – james

0

首先在其各自的.java文件中寫入所有類。

JRadioButton roundrButton在類Final中聲明,因此無法直接從其他類calcButtonHandler2訪問。

您需要使用Final類的對象來訪問它,或者您可以使用內部類來訪問它。