-4

コードの一部に問題があります。私はこれに長い間取り組んできましたが、疲れ果てて何か簡単なことを見逃しています. JFrame の新しいタイトルを入力するためのテキスト ボックス、「新しい名前を設定」というボタン、および「終了ボタン」が必要です。誰かこのコードを見て、就寝できるように情報を教えてください。ありがとうあなた

//Good One

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.swing.*;

public class Pool {
public static void main(String[] args) {
    new poolCalc();
}
 }

class poolCalc extends JFrame {
private static final long serialVersionUID = 1L;

public static final double MILLIMETER = 1;
public static final double METER = 1000 * MILLIMETER;
public static final double INCH = 25.4 * MILLIMETER;
public static final double FOOT = 304.8 * MILLIMETER;
public static final double YARD = 914.4 * MILLIMETER;

private static final DecimalFormat df = new DecimalFormat("#,##0.###");

private JTabbedPane tabs;
private JPanel generalPanel;
private JPanel optionsPanel;
private JPanel customerPanel;
private JPanel contractorPanel;
private JPanel poolPanel;
private JPanel hotTubPanel;
private JPanel tempCalPanel;
private JPanel lengthCalPanel;

public poolCalc() {
    super("The Pool Calculator");
    setSize(340, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(true);

    initializeComponents();

    setLocationRelativeTo(null);
    setVisible(true);
}

private void initializeComponents() {
    Container pane = getContentPane();

    tabs = new JTabbedPane();

    generalTab();
    optionsTab();
    customerTab();
    contractorTab();
    poolsTab();
    hotTubsTab();
    tempCalTab();
    lengthCalTab();

    tabs.add("General", generalPanel);
    tabs.add("Options", optionsPanel);
    tabs.add("Customers", customerPanel);
    tabs.add("Contractors", contractorPanel);
    tabs.add("Pools", poolPanel);
    tabs.add("Hot Tubs", hotTubPanel);
    tabs.add("Temp Calc", tempCalPanel);
    tabs.add("Length Calc", lengthCalPanel);

    pane.add(tabs);
}

private JButton createExitButton() {
    JButton exitButton = new JButton("Exit");
    exitButton.setMnemonic('x');
    exitButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });

    return exitButton;
}

private void generalTab() {
    generalPanel = new JPanel(new FlowLayout());
    String currentTime = SimpleDateFormat.getInstance().format(
            Calendar.getInstance().getTime());
    generalPanel.add(new JLabel("Today's Date: " + currentTime));
    generalPanel.add(createExitButton());
}

private JTextField createTitleField(String text, int length) {
    JTextField tf = new JTextField(length);
    tf.setEditable(false);
    tf.setFocusable(false);
    tf.setText(text);
    return tf;
}

// FIX
private void optionsTab() {
    optionsPanel = new JPanel(new FlowLayout());
    //optionsPanel.setLayout(null);
    JLabel labelOptions = new JLabel("Change Company Name:");
    labelOptions.setBounds(120, 10, 150, 20);
    optionsPanel.add(labelOptions);
    final JTextField newTitle = new JTextField("Some Title");
    newTitle.setBounds(80, 40, 225, 20);
    optionsPanel.add(newTitle);
    final JTextField myTitle = new JTextField("My Title...");
    myTitle.setBounds(80, 40, 225, 20);
    myTitle.add(labelOptions);
    JButton newName = new JButton("Set New Name");
    newName.setBounds(60, 80, 150, 20);
    //newName.addActionListener(this);
    optionsPanel.add(newName);
    optionsPanel.add(createExitButton());

}

private void customerTab() {
    customerPanel = createContactPanel("Customer", "customer.txt");
}

private void contractorTab() {
    contractorPanel = createContactPanel("Contractor", "contractor.txt");
}

private void poolsTab() {
    poolPanel = new JPanel(new FlowLayout());

    final JRadioButton roundPool = new JRadioButton("Round Pool");
    final JRadioButton ovalPool = new JRadioButton("Oval Pool");
    final JRadioButton rectangularPool = new JRadioButton("Rectangle Pool");

    roundPool.setSelected(true);

    ButtonGroup group = new ButtonGroup();
    group.add(roundPool);
    group.add(rectangularPool);

    poolPanel.add(roundPool);
    poolPanel.add(rectangularPool);

    poolPanel.add(new JLabel("Enter the pool's length (ft): "));
    final JTextField lengthField = new JTextField(10);
    poolPanel.add(lengthField);

    final JLabel widthLabel = new JLabel("Enter the pool's width (ft): ");
    widthLabel.setEnabled(false);
    poolPanel.add(widthLabel);

    final JTextField widthField = new JTextField(10);
    widthField.setEnabled(false);
    poolPanel.add(widthField);

    poolPanel.add(new JLabel("Enter the pool's depth (ft): "));
    final JTextField depthField = new JTextField(10);
    poolPanel.add(depthField);

    JButton calculateVolume = new JButton("Calculate Volume");
    calculateVolume.setMnemonic('C');
    poolPanel.add(calculateVolume);
    poolPanel.add(createExitButton());

    poolPanel.add(new JLabel("The pool's volume is (ft^3): "));
    final JTextField volumeField = new JTextField(10);
    volumeField.setEditable(false);
    poolPanel.add(volumeField);

    final JTextArea messageArea = createMessageArea(2, 20, "");
    poolPanel.add(messageArea);

    calculateVolume.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (roundPool.isSelected()) {
                widthField.setText(lengthField.getText());
            }

            ValidationResult result = validateFields(new JTextField[] {
                    lengthField, widthField, depthField });

            String errors = "";
            if (result.filled != 3) {
                errors += "Please fill out all fields! ";
            }

            if (result.valid != 3 && result.filled != result.valid) {
                errors += "Please enter valid numbers!";
            }

            if (errors != "") {
                messageArea.setText(errors);
                messageArea.setVisible(true);
            }

            else {
                messageArea.setVisible(false);

                double length = Double.parseDouble(lengthField.getText());
                double width = Double.parseDouble(widthField.getText());
                double depth = Double.parseDouble(depthField.getText());

                double volume;
                if (roundPool.isSelected()) {
                    volume = Math.PI * Math.pow(length / 2.0, 2) * depth;
                }

                if (rectangularPool.isSelected()) {
                    volume = length * width * depth * 5.9;
                }

                else {
                    volume = length * width * depth * 7.5;
                }

                volumeField.setText(df.format(volume));
            }
        }
    });

    ActionListener poolsListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == roundPool) {
                widthLabel.setEnabled(false);
                widthField.setEnabled(false);
                widthField.setText(lengthField.getText());

            }

            else if (e.getSource() == rectangularPool) {
                widthLabel.setEnabled(true);
                widthField.setEnabled(true);
                messageArea.setVisible(false);
            }
        }
    };

    roundPool.addActionListener(poolsListener);
    ovalPool.addActionListener(poolsListener);
    rectangularPool.addActionListener(poolsListener);
}

private void hotTubsTab() {
    hotTubPanel = new JPanel(new FlowLayout());

    final JRadioButton roundTub = new JRadioButton("Round Tub");
    final JRadioButton ovalTub = new JRadioButton("Oval Tub");


    roundTub.setSelected(true);

    ButtonGroup group = new ButtonGroup();
    group.add(roundTub);
    group.add(ovalTub);


    hotTubPanel.add(roundTub);
    hotTubPanel.add(ovalTub);


    hotTubPanel.add(new JLabel("Enter the tub's length (ft): "));
    final JTextField lengthField = new JTextField(10);
    hotTubPanel.add(lengthField);

    final JLabel widthLabel = new JLabel("Enter the tub's width (ft): ");
    widthLabel.setEnabled(false);
    hotTubPanel.add(widthLabel);

    final JTextField widthField = new JTextField(10);
    widthField.setEnabled(false);
    hotTubPanel.add(widthField);

    hotTubPanel.add(new JLabel("Enter the tub's depth (ft): "));
    final JTextField depthField = new JTextField(10);
    hotTubPanel.add(depthField);

    JButton calculateVolume = new JButton("Calculate Volume");
    calculateVolume.setMnemonic('C');
    hotTubPanel.add(calculateVolume);
    hotTubPanel.add(createExitButton());

    hotTubPanel.add(new JLabel("The tub's volume is (ft^3): "));
    final JTextField volumeField = new JTextField(10);
    volumeField.setEditable(false);
    hotTubPanel.add(volumeField);

    final JTextArea messageArea = createMessageArea(1, 25,
            "Width will be set to the same value as length");
    hotTubPanel.add(messageArea);

    calculateVolume.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (roundTub.isSelected()) {
                widthField.setText(lengthField.getText());
            }

            ValidationResult result = validateFields(new JTextField[] {
                    lengthField, widthField, depthField });

            String errors = "";
            if (result.filled != 3) {
                errors += "Please fill out all fields! ";
            }

            if (result.valid != 3 && result.filled != result.valid) {
                errors += "Please enter valid numbers!";
            }

            if (errors != "") {
                messageArea.setText(errors);
                messageArea.setVisible(true);
            }

            else {
                messageArea.setVisible(false);

                double length = Double.parseDouble(lengthField.getText());
                double width = Double.parseDouble(widthField.getText());
                double depth = Double.parseDouble(depthField.getText());

                double volume;
                if (roundTub.isSelected()) {
                    volume = Math.PI * Math.pow(length / 2.0,2) * depth;
                }

                if (ovalTub.isSelected()) {
                    volume = Math.PI * ((length * width)*2) * depth;

                }

                else {
                    volume = length * width * depth * 7.5;
                }

                volumeField.setText(df.format(volume));
            }
        }
    });

    ActionListener tubsListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == roundTub) {
                widthLabel.setEnabled(false);
                widthField.setEnabled(false);
                widthField.setText(lengthField.getText());

            }

            else if (e.getSource() == ovalTub) {
                widthLabel.setEnabled(true);
                widthField.setEnabled(true);
                messageArea.setVisible(false);}         
        }
    };
    roundTub.addActionListener(tubsListener);
    ovalTub.addActionListener(tubsListener);}

private void tempCalTab() {
    tempCalPanel = new JPanel(new FlowLayout());

    tempCalPanel.add(new JLabel("Enter temperature: "));

    final JTextField temperatureField = new JTextField(10);
    tempCalPanel.add(temperatureField);

    final JComboBox optionComboBox = new JComboBox(
            new String[] { "C", "F" });
    tempCalPanel.add(optionComboBox);

    tempCalPanel.add(new JLabel("Result: "));
    final JTextField resultField = new JTextField(18);
    resultField.setEditable(false);
    tempCalPanel.add(resultField);

    final JLabel oppositeLabel = new JLabel("F");
    tempCalPanel.add(oppositeLabel);

    JButton convertButton = new JButton("Convert");
    convertButton.setMnemonic('C');
    tempCalPanel.add(convertButton);
    tempCalPanel.add(createExitButton());

    final JTextArea messageArea = createMessageArea(1, 20,
            "System Messages");
    tempCalPanel.add(messageArea);

    optionComboBox.addItemListener(new ItemListener() {

        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                if ("F".equals(e.getItem())) {
                    oppositeLabel.setText("C");}

                else {
                    oppositeLabel.setText("F");}}}
    });

    convertButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            ValidationResult result = validateFields(new JTextField[] { temperatureField });
            String errors = "";
            if (result.filled != 1 || result.valid != 1) {
                errors += "Value set to zero";}

            if (errors != "") {
                messageArea.setText(errors);
                messageArea.setVisible(true);
                temperatureField.setText("0");}

            else {
                messageArea.setVisible(false);}

            double temperature = Double.parseDouble(temperatureField
                    .getText());

            double resultValue = 0;
            if (oppositeLabel.getText().equals("C")) {
                resultValue = (temperature - 32.0) / 9.0 * 5.0;}

            else if (oppositeLabel.getText().equals("F")) {
                resultValue = ((temperature * 9.0) / 5.0) + 32.0;}

            resultField.setText(df.format(resultValue));}
    });
}

private void lengthCalTab() {
    lengthCalPanel = new JPanel(new FlowLayout());

    lengthCalPanel.add(createTitleField("Millimeters", 6));
    lengthCalPanel.add(createTitleField("Meters", 4));
    lengthCalPanel.add(createTitleField("Yards", 4));
    lengthCalPanel.add(createTitleField("Feet", 3));
    lengthCalPanel.add(createTitleField("Inches", 6));

    final JTextField millimetersField = new JTextField(6);
    final JTextField metersField = new JTextField(4);
    final JTextField yardsField = new JTextField(4);
    final JTextField feetField = new JTextField(3);
    final JTextField inchesField = new JTextField(6);

    lengthCalPanel.add(millimetersField);
    lengthCalPanel.add(metersField);
    lengthCalPanel.add(yardsField);
    lengthCalPanel.add(feetField);
    lengthCalPanel.add(inchesField);

    JButton convertButton = new JButton("Convert");
    convertButton.setMnemonic('C');

    convertButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            double millimeters = convertToDouble(millimetersField.getText());
            double meters = convertToDouble(metersField.getText());
            double yards = convertToDouble(yardsField.getText());
            double feet = convertToDouble(feetField.getText());
            double inches = convertToDouble(inchesField.getText());
            double value = 0;

            if (millimeters != 0) {
                value = millimeters * MILLIMETER;}
            else if (meters != 0) {
                value = meters * METER;}
            else if (yards != 0) {
                value = yards * YARD;}
            else if (feet != 0) {
                value = feet * FOOT;}
            else if (inches != 0) {
                value = inches * INCH;}

            millimeters = value / MILLIMETER;
            meters = value / METER;
            yards = value / YARD;
            feet = value / FOOT;
            inches = value / INCH;

            millimetersField.setText(df.format(millimeters));
            metersField.setText(df.format(meters));
            yardsField.setText(df.format(yards));
            feetField.setText(df.format(feet));
            inchesField.setText(df.format(inches));}

        private double convertToDouble(String s) {
            try {
                return Double.parseDouble(s);}

            catch (Exception e) {
                return 0;}}
    });

    JButton clearButton = new JButton("Clear");
    clearButton.setMnemonic('l');

    clearButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            millimetersField.setText(null);
            metersField.setText(null);
            yardsField.setText(null);
            feetField.setText(null);
            inchesField.setText(null);}
    });

    lengthCalPanel.add(convertButton);
    lengthCalPanel.add(clearButton);
    lengthCalPanel.add(createExitButton());}

private String loadDataFromFile(String fileName) {
    String data = "";

    try {
        BufferedReader reader = new BufferedReader(new FileReader(fileName));
        while (reader.ready()) {
            data += reader.readLine() + "\n";}

        reader.close();}

    catch (IOException e){
    }

    return data;}

private JPanel createContactPanel(final String contactName,
        final String fileName) {
    JPanel pane = new JPanel(new FlowLayout());

    final JTextArea customerDisplay = new JTextArea(8, 25);
    customerDisplay.setLineWrap(true);
    customerDisplay.setEditable(false);
    pane.add(new JScrollPane(customerDisplay));
    pane.add(createExitButton());

    JButton addCustomerButton = new JButton("Add " + contactName);
    addCustomerButton.setMnemonic('A');
    pane.add(addCustomerButton);

    JButton refreshButton = new JButton("Refresh");
    refreshButton.setMnemonic('R');
    pane.add(refreshButton);

    final JTextArea messageArea = createMessageArea(2, 25, "");
    messageArea.setBackground(Color.white);
    pane.add(messageArea);

    addCustomerButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            new EditContact(contactName, fileName);}
    });

    refreshButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String data = loadDataFromFile(fileName);
            if (data != "") {
                customerDisplay.setText(data);
                customerDisplay.setEnabled(true);
                messageArea.setText("File " + fileName
                        + " can be read from!");
            }

            else {
                customerDisplay.setText("Click Add "
                        + contactName
                        + " button to add "
                        + contactName.toLowerCase()
                        + ".  And click Refresh button to update this pane.");
                customerDisplay.setEnabled(false);
                messageArea.setText("File " + fileName + " is not "
                        + "there yet! It will be created "
                        + "when you add " + contactName.toLowerCase()
                        + "s!");
            }
        }
    });

    refreshButton.doClick();
    return pane;
}

private JTextArea createMessageArea(int rows, int cols, String text) {
    final JTextArea messageArea = new JTextArea(rows, cols);
    messageArea.setBorder(BorderFactory.createEmptyBorder());
    messageArea.setLineWrap(true);
    messageArea.setWrapStyleWord(true);
    messageArea.setFont(new Font("System", Font.PLAIN, 12));
    messageArea.setText(text);
    messageArea.setBackground(null);
    messageArea.setForeground(Color.GRAY);
    messageArea.setEnabled(true);
    messageArea.setFocusable(false);
    return messageArea;
}

private class ValidationResult {
    int filled;
    int valid;
}

private ValidationResult validateFields(JTextField[] fields) {
    ValidationResult result = new ValidationResult();
    for (int i = 0; i < fields.length; i++) {
        JTextField field = fields[i];
        if ((field.getText() != null) && (field.getText().length() > 0)) {
            result.filled++;
        }

        try {
            Double.parseDouble(field.getText());
            field.setBackground(Color.white);
            result.valid++;
        }

        catch (Exception e) {
            field.setBackground(Color.orange);
        }
    }

    return result;
}

private class EditContact extends JDialog {
    private static final long serialVersionUID = 1L;

    private final String contactName;
    private final String fileName;
    private File file;
    private JTextField nameField;
    private JTextField addressField;
    private JTextField cityField;

    private JComboBox stateComboBox;
    private JTextField zipField;
    private JTextField phoneField;
    private JTextArea messageArea;

    public EditContact(String contactName, String fileName) {
        super(poolCalc.this, contactName + "s");
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setModalityType(ModalityType.APPLICATION_MODAL);

        setSize(418, 300);
        this.contactName = contactName;
        this.fileName = fileName;

        initializeComponents();

        if (openFile()) {
            displayMessage(null);
        }

        else {
            displayMessage("File " + fileName + " does not exist yet! "
                    + "Will be created when you add a "
                    + contactName.toLowerCase() + "!");
        }

        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void displayMessage(String message) {
        if (message != null) {
            messageArea.setVisible(true);
            messageArea.setText(message);
        }

        else {
            messageArea.setVisible(false);
        }
    }

    private boolean openFile() {
        file = new File(fileName);
        return file.exists();
    }

    private boolean deleteFile() {
        return file.exists() && file.delete();
    }

    private boolean saveToFile() {
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter(file,
                    true));

            writer.write("Name: " + nameField.getText() + "\n");
            writer.write("Address: " + addressField.getText() + "\n");
            writer.write("City: " + cityField.getText() + "\n");
            writer.write("State: "
                    + stateComboBox.getSelectedItem().toString() + "\n");
            writer.write("ZIP: " + zipField.getText() + "\n");
            writer.write("Phone: " + phoneField.getText() + "\n");
            writer.write("\n");

            writer.close();
            return true;

        }

        catch (IOException e) {
            return false;
        }
    }

    private void initializeComponents() {
        Container pane = getContentPane();
        pane.setLayout(new FlowLayout());

        pane.add(new JLabel(contactName + " Name "));
        nameField = new JTextField(25);
        pane.add(nameField);

        pane.add(new JLabel("Address "));
        addressField = new JTextField(28);
        pane.add(addressField);

        pane.add(new JLabel("City "));
        cityField = new JTextField(32);
        pane.add(cityField);

        pane.add(new JLabel("State "));
        stateComboBox = new JComboBox(new String[] { "AL", "AK", "AZ",
                "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL",
                "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN",
                "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC",
                "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX",
                "UT", "VT", "VA", "WA", "WV", "WI", "WY" });
        pane.add(stateComboBox);

        pane.add(new JLabel("ZIP "));
        zipField = new JTextField(5);
        pane.add(zipField);

        pane.add(new JLabel("Phone "));
        phoneField = new JTextField(10);
        pane.add(phoneField);

        JButton addContactButton = new JButton("Add " + this.contactName);
        addContactButton.setMnemonic('A');
        addContactButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (saveToFile()) {
                    displayMessage(contactName + " added");
                }

                else {
                    displayMessage("File saving error!");
                }
            }
        });

        pane.add(addContactButton);

        JButton closeButton = new JButton("Close");
        closeButton.setMnemonic('C');
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setVisible(false);
            }
        });

        pane.add(closeButton);

        JButton deleteFileButton = new JButton("Delete File");
        deleteFileButton.setMnemonic('D');
        deleteFileButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (deleteFile()) {
                    displayMessage("File " + fileName + " deleted!");
                }
            }
        });

        pane.add(deleteFileButton);

        messageArea = createMessageArea(2, 30, "");
        messageArea.setBackground(Color.white);
        pane.add(messageArea);
    }
}

}

4

4 に答える 4