Беда с инициализацией - PullRequest
       9

Беда с инициализацией

0 голосов
/ 23 августа 2011
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 ]

1 голос
/ 23 августа 2011

Измените определение 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 из их определений (я бы порекомендовал первый метод).

0 голосов
/ 23 августа 2011

Прежде всего запишите все классы в отдельных файлах .java.

JRadioButton roundrButton объявлен в классе Final, поэтому к нему нельзя напрямую получить доступ из другого класса calcButtonHandler2.

Вам нужен объект класса Final для доступа к нему, или вы можете использовать внутренние классы для доступа к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...