Почему события не работают в моем апплете? (они работают в оригинальном приложении) - PullRequest
0 голосов
/ 01 декабря 2011

Мой апплет - это в основном два поля со списком, которые хранят значения в переменных с их событиями (когда пользователь выбирает опцию). Кнопка подтверждения генерирует событие, которое добавляет эти два значения вместе. Приложение работает нормально, но когда я пытаюсь преобразовать его в апплет, текстовое поле не появляется, и, кажется, появляется какой-то предупреждающий знак, который появляется всякий раз, когда я нажимаю на комбо-опцию. Любой совет, пожалуйста?

Вот код для апплета:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DormPlanApplet extends JApplet
{
    private JPanel selectionPanel;
    private JPanel costPanel;
    private JComboBox dormListBox;
    private JComboBox mealPlanListBox;
    private JLabel costLabel;
    private JTextField costField;
    private JButton confirmButton;
    double dormCost;
    double mealCost;
    double totalCost;
    int checker1;
    int checker2;
    String costString;

    private String[] dormListArray = {"Allen Hall", "Pike Hall", "Farthing Hall", "University Suites" };
    private String[] mealPlanListArray = {"7 Meals", "14 Meals", "Unlimited Meals" };


    public void init()
    {
        //super("College Cost Calculator");

        //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new BorderLayout());

        buildSelectionPanel();
        buildCostPanel();

        add(selectionPanel, BorderLayout.CENTER);
        add(costPanel, BorderLayout.SOUTH);

        //pack();
        //setVisible(true);
    }


    private void buildSelectionPanel()
    {
        selectionPanel = new JPanel();
        selectionPanel.setLayout(new FlowLayout());

        dormListBox = new JComboBox(dormListArray);
        mealPlanListBox = new JComboBox(mealPlanListArray);

        dormListBox.addActionListener(new dormCostListener());
        mealPlanListBox.addActionListener(new mealCostListener());

        selectionPanel.add(dormListBox);
        selectionPanel.add(mealPlanListBox);

    }

    private void buildCostPanel()
    {
        costPanel = new JPanel();
        costPanel.setLayout(new FlowLayout());

        costLabel = new JLabel("The total cost is:");
        confirmButton = new JButton("Confirm");
        confirmButton.addActionListener(new calcButtonListener());

        costField = new JTextField(12);
        costField.setEditable(false);
        costPanel.add(confirmButton);
        costPanel.add(costLabel);
        costPanel.add(costField);
    }

    private class dormCostListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {

            checker1 = 1;

            switch (dormListBox.getSelectedIndex())
            {
                case 0:
                    dormCost = 1500;
                break;

                case 1:
                    dormCost = 1600;
                break;

                case 2:
                    dormCost = 1200;
                break;


                case 3:
                    dormCost = 1800;
                break;

                default:
                    dormCost = 0;
                break;
            }
        }
    }


    private class mealCostListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            checker2 = 1;

            switch (mealPlanListBox.getSelectedIndex())
            {
                case 0:
                    mealCost = 560;
                break;

                case 1:
                    mealCost = 1095;
                break;

                case 2:
                    mealCost = 1500;
                break;

                default:
                    mealCost = 0;
                break;
            }
        }
    }

    private class calcButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if ((checker1 == 1) && (checker2 == 1))
            {
                totalCost = dormCost + mealCost;
                costString = Double.toString(totalCost);

                costField.setText(costString);
            } else {
                    costField.setText("It doesn't work!");
                }

        }
    }

}

Вот код для заявки на оригинал:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DormPlanApp extends JFrame
{
    private JPanel selectionPanel;
    private JPanel costPanel;
    private JComboBox dormListBox;
    private JComboBox mealPlanListBox;
    private JLabel costLabel;
    private JTextField costField;
    private JButton confirmButton;
    double dormCost;
    double mealCost;
    double totalCost;
    int checker1;
    int checker2;
    String costString;

    private String[] dormListArray = {"Allen Hall", "Pike Hall", "Farthing Hall", "University Suites" };
    private String[] mealPlanListArray = {"7 Meals", "14 Meals", "Unlimited Meals" };


    public DormPlanApp()
    {
        super("College Cost Calculator");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new BorderLayout());

        buildSelectionPanel();
        buildCostPanel();

        add(selectionPanel, BorderLayout.CENTER);
        add(costPanel, BorderLayout.SOUTH);

        pack();
        setVisible(true);
    }


    private void buildSelectionPanel()
    {
        selectionPanel = new JPanel();
        selectionPanel.setLayout(new FlowLayout());

        dormListBox = new JComboBox(dormListArray);
        mealPlanListBox = new JComboBox(mealPlanListArray);

        dormListBox.addActionListener(new dormCostListener());
        mealPlanListBox.addActionListener(new mealCostListener());

        selectionPanel.add(dormListBox);
        selectionPanel.add(mealPlanListBox);

    }

    private void buildCostPanel()
    {
        costPanel = new JPanel();
        costPanel.setLayout(new FlowLayout());

        costLabel = new JLabel("The total cost is:");
        confirmButton = new JButton("Confirm");
        confirmButton.addActionListener(new calcButtonListener());

        costField = new JTextField(12);
        costField.setEditable(false);
        costPanel.add(confirmButton);
        costPanel.add(costLabel);
        costPanel.add(costField);
    }

    private class dormCostListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {

            checker1 = 1;

            switch (dormListBox.getSelectedIndex())
            {
                case 0:
                    dormCost = 1500;
                break;

                case 1:
                    dormCost = 1600;
                break;

                case 2:
                    dormCost = 1200;
                break;


                case 3:
                    dormCost = 1800;
                break;

                default:
                    dormCost = 0;
                break;
            }
        }
    }


    private class mealCostListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            checker2 = 1;

            switch (mealPlanListBox.getSelectedIndex())
            {
                case 0:
                    mealCost = 560;
                break;

                case 1:
                    mealCost = 1095;
                break;

                case 2:
                    mealCost = 1500;
                break;

                default:
                    mealCost = 0;
                break;
            }
        }
    }

    private class calcButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if ((checker1 == 1) && (checker2 == 1))
            {
                totalCost = dormCost + mealCost;
                costString = Double.toString(totalCost);

                costField.setText(costString);
            } else {
                    costField.setText("It doesn't work!");
                }

        }
    }

    public static void main(String[] args)
    {
        new DormPlanApp();
    }
}

1 Ответ

1 голос
/ 01 декабря 2011

Вам необходимо установить размер вашего апплета. Во время тестирования вы можете использовать метод setSize, например:

public void init()
{
    //super("College Cost Calculator");

    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setLayout(new BorderLayout());

    buildSelectionPanel();
    buildCostPanel();

    add(selectionPanel, BorderLayout.CENTER);
    add(costPanel, BorderLayout.SOUTH);

    setSize(400, 100);

    //pack();
    //setVisible(true);
}

Оператор HTML-апплета передаст ширину и высоту вашему апплету, поэтому вы можете установить размер с помощью параметров оператора апплета.

Отредактировано для добавления: Вы задаете строки по умолчанию для полей со списком, но не значения по умолчанию. Если кто-то просто нажимает кнопку «Рассчитать», принимая значения по умолчанию для поля со списком, то ваша программа не вычисляет правильное значение.

...