1

Eclipse でプログラムを実行すると、エラーがあると表示されますが、ほとんどのエラーがそのプログラムに表示されるように、左マージンにマークされていません。そのメッセージをバイパスすると、プログラムは正しく実行されます。Eclipse のコンソール領域では、次のように表示されます。

javax.swing.jlabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0

どういう意味ですか?この問題を解決するにはどうすればよいですか? プログラムに変更したいもの、つまり、削除/追加する必要があるもの、不要なものはありますか?

注: 更新されたコードは以下のとおりです。大文字と小文字が変更され、以下で提案されているように getText() が追加されています。

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

public class JPizzeria extends JFrame implements ActionListener, ItemListener {

    DecimalFormat fmt = new DecimalFormat("0.00");

    private double Price;
    double smallPizza = 7;
    double toppings;

    JLabel title = new JLabel("Steve's Pizzeria");
    Font headlineFont = new Font("Courier", Font.BOLD, 40);
    JLabel info = new JLabel("What size of pizza do you wish to order?");
    Font infoFont = new Font("Courier", Font.BOLD, 18);
    JLabel info2 = new JLabel("What would you like on your pizza?");
    Font info2Font = new Font("Courier", Font.BOLD, 18);
    JLabel totalPrice = new JLabel("Total Price");
    Font totalPriceFont = new Font("Courier", Font.BOLD, 18);

    JCheckBox extraCheeseBox = new JCheckBox("Extra Cheese", false);
    JCheckBox pepperoniBox = new JCheckBox("Pepperoni", false);
    JCheckBox sausageBox = new JCheckBox("Sausage", false);
    JCheckBox groundBeefBox = new JCheckBox("Ground Beef", false);
    JCheckBox onionBox = new JCheckBox("Onions", false);
    JCheckBox mushroomBox = new JCheckBox("Mushrooms", false);
    JCheckBox blackOlivesBox = new JCheckBox("Black Olives", false);
    JCheckBox greenPeppersBox = new JCheckBox("Green Peppers", false);

    JTextField totPrice = new JTextField(10);

    public JPizzeria() {

        String[] pizzaSize = { "Small-$7.00", "Medium-$9.00", "Large-$11.00",
                "Extra-Large-$14.00" };

        JComboBox decide = new JComboBox(pizzaSize);

        add(title);
        title.setFont(headlineFont);
        add(info2);
        info2.setFont(info2Font);
        add(extraCheeseBox);
        add(pepperoniBox);
        add(sausageBox);
        add(groundBeefBox);
        add(onionBox);
        add(mushroomBox);
        add(blackOlivesBox);
        add(greenPeppersBox);
        add(info);
        info.setFont(infoFont);
        add(decide);
        add(totalPrice);
        totalPrice.setFont(totalPriceFont);
        add(totPrice);
        setLayout(new FlowLayout(FlowLayout.CENTER));
        decide.setSelectedIndex(3);
        decide.addActionListener(this);
        totPrice.addActionListener(this);

        totPrice.setText("$");
        extraCheeseBox.addItemListener(this);
        pepperoniBox.addItemListener(this);
        sausageBox.addItemListener(this);
        groundBeefBox.addItemListener(this);
        onionBox.addItemListener(this);
        mushroomBox.addItemListener(this);
        blackOlivesBox.addItemListener(this);
        greenPeppersBox.addItemListener(this);

    }

    public static void main(String[] args) {
        JPizzeria aFrame = new JPizzeria();
        final int WIDTH = 650;
        final int HEIGHT = 250;
        aFrame.setSize(WIDTH, HEIGHT);
        aFrame.setVisible(true);

    }

    public void actionPerformed(ActionEvent e) {
        JComboBox decide = (JComboBox) e.getSource();
        String pizzaSize = (String) decide.getSelectedItem();

        System.out.println(pizzaSize);

        if (pizzaSize.equals("Small-$7.00"))
            Price = smallPizza + 0;

        else if (pizzaSize.equals("Medium-$9.00"))
            Price = smallPizza + 2;

        else if (pizzaSize.equals("Large-$11.00"))
            Price = smallPizza + 4;

        else
            Price = smallPizza + 7;

        System.out.println(totalPrice.getText());;
        totPrice.setText("$" + (fmt.format(Price + toppings)));
    }

    public void itemStateChanged(ItemEvent event) {
        Object source = event.getSource();
        int select = event.getStateChange();

        if (source == extraCheeseBox) {
            if (select == ItemEvent.SELECTED) {
                toppings += 1;
            } else
                toppings -= 1;
        } else if (source == pepperoniBox) {
            if (select == ItemEvent.SELECTED)
                toppings += 1.00;
            else
                toppings -= 1.00;
        } else if (source == sausageBox) {
            if (select == ItemEvent.SELECTED)
                toppings += 1.00;
            else
                toppings -= 1.00;
        } else if (source == groundBeefBox) {
            if (select == ItemEvent.SELECTED)
                toppings += 1.00;
            else
                toppings -= 1.00;
        } else if (source == onionBox) {
            if (select == ItemEvent.SELECTED)
                toppings += 1.00;
            else
                toppings -= 1.00;
        } else if (source == mushroomBox) {
            if (select == ItemEvent.SELECTED)
                toppings += 1.00;
            else
                toppings -= 1.00;
        } else if (source == blackOlivesBox) {
            if (select == ItemEvent.SELECTED)
                toppings += 1.00;
            else
                toppings -= 1.00;
        } else if (source == greenPeppersBox) {
            if (select == ItemEvent.SELECTED)
                toppings += 1.00;
            else
                toppings -= 1.00;
        } else if (select == ItemEvent.SELECTED)
            toppings += 1.00;
        else
            toppings -= 1.00;
        totPrice.setText("$ " + fmt.format(toppings));
    }
}
4

3 に答える 3

1

エラーがあり、ガターでマークされていない場合、エラーはこのファイルではなく、プロジェクトの別の場所 (別のファイルまたはプロジェクト構成) にあります。問題ビューで、プロジェクトのすべてのエラーを確認できます。[問題] ビューが表示されない場合は、[ウィンドウ] > [ビューの表示] > [コンソール]に移動するか、 Alt+Shift+Q、次にXを入力して表示できます。

ここに画像の説明を入力

コンソールで得られる出力は、次の行によるものです。

System.out.println(totalPrice);

totalPriceそのJLabelため、位置やその他のプロパティなど、コンポーネント自体に関する情報を出力します。これは、プロジェクトにエラーがあることを示すメッセージとは関係ありません。

JLabel のテキストを出力したい場合は、次のように置き換える必要があります。

System.out.println(totalPrice.getText());

提案

提案を求めているので、最初にすべきことは、クラスを JFrame のサブクラスとして設定しないことです。これは不要であり、柔軟性がありません。JFrame オブジェクトを作成し、それに独自のものを追加するだけです。

また、すべての JCheckBox インスタンスで行うように、変数またはフィールド名を大文字で始めるのは不適切な Java スタイルです。それが StackOverflow の構文ハイライターをどのように混乱させるかを見てください。最初の大文字の名前は、クラス、インターフェイス、または列挙型です。

最後に、バグがあるようです: 最初にピザのサイズを選択し、次にトッピングのみを選択すると、合計金額はトッピングのみの合計金額になり、ピザ自体の価格は表示されません。

于 2013-11-06T18:14:44.987 に答える
0

Eclipse でプログラムを実行すると、エラーがあると表示されますが、ほとんどのエラーがそのプログラムに表示されるように、左マージンにマークされていません。

構文エラーはまったくありません。作成していないのにエラーが表示されるのはなぜですか?


どういう意味ですか?

を印刷していますJLabel
表示されるのはエラーではなくStringJLabel.


この問題を解決するにはどうすればよいですか? プログラムに変更したいもの、つまり、削除/追加する必要があるもの、不要なものはありますか?

にあるテキストを取得したい場合は、 のメソッドをJLabel使用します。 以下に示すようにします。 getText()JLabel

System.out.println(totalPrice.getText());  
于 2013-11-06T18:17:48.767 に答える