初始化有问题

时间:2011-08-23 17:55:41

标签: java initialization radio-button

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个错误,由行旁边的//**表示。请帮我弄清楚我遇到的问题。

2 个答案:

答案 0 :(得分: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);

至于最后两个错误,将类声明移动到由编译错误调出的单独文件中,或从其定义中删除public关键字(我建议使用第一种方法)。

答案 1 :(得分:0)

首先在单独的.java文件中编写所有类。

JRadioButton roundrButton在类Final中声明,因此无法直接从另一个类calcButtonHandler2访问它。

您需要使用类Final的对象来访问它,或者您可以使用内部类来访问它。