3

私は Java を使い始めたばかりで、これまで PHP しか使用したことがありませんでした。Eclipse IDE を使用しています。

別の惑星でのあなたの体重を教えてくれるプログラムを作ろうとしています - とても簡単に思えます

これまでに行ったことは、Swing でインターフェースの半分を作成したことだけです (それは、Swing と呼ばれるものですか?)

時々それを実行すると、タイトル、テキストボックスなどで期待どおりに表示されます....他の場合(まったく変更が加えられていない場合)、空白の画面が表示されます ここに画像の説明を入力

画像は、動作時の様子を示しています。機能していないときは、オブジェクトがありません。約 20% の確率で機能します。

これは私のドロップダウンメニューが原因だったのではないかと思います-またはJComboBox、これはとても頭痛の種でした-EclipseはJComboBoxの各言及の後に「<オブジェクト>」を追加するようにしました-それは「JComboBoxは未加工のタイプです。への参照ジェネリック型 JComboBox はパラメータ化する必要があります"

これがなぜなのかわかりません。おそらく本当に太っているだけです。これがばかげた質問であれば申し訳ありませんが、どうすればこの問題を解決できますか?私のコードの何が問題なのですか?

package calc;

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

public class View extends JFrame {

static String titleText = "Calculate your Mass on another Plannet";

public View(){
    super(titleText);
    setSize(500,400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

    FlowLayout flo = new FlowLayout();
    setLayout(flo);

    JPanel inputData = new JPanel();


    //Labels
    JLabel lblTitle = new JLabel (titleText, JLabel.CENTER);
    lblTitle.setFont(new Font("Arial", Font.BOLD, 24));
    JLabel lblInputMass = new JLabel ("Weight", JLabel.LEFT);
    JLabel lblInputUnits = new JLabel("Units");     


    //Input Boxes and Lists
    JTextField txtInputMass = new JTextField(5);

    JComboBox<Object> comInputUnits;
    String arrUnits[] = {"Kilos", "Stone", "Pounds"};
    comInputUnits = new JComboBox<Object>(arrUnits);
    comInputUnits.setSelectedIndex(1);


    //Buttons
    JButton btnCalculate = new JButton("Calculate");

    //Append objects
    add(lblTitle);
    inputData.add(lblInputMass);
    inputData.add(txtInputMass);
    inputData.add(lblInputUnits);
    inputData.add(comInputUnits);
    inputData.add(btnCalculate);

    add(inputData);


}
/**
 * @param args
 */
public static void main(String[] args) {
    View sal = new View();


}

}

申し訳ありませんが、非常に長い質問です。私が言ったように、私はJavaについて大麦を知っていて、始めたばかりです-ありがとう:)

4

4 に答える 4

8

あなたがすべき

  • イベントディスパッチスレッド内でのみ Swing コンポーネントを操作します。
  • setVisible(true)すべてのコンポーネントがフレームに追加された後にのみ呼び出します。
  • あまり重要ではありませんが、Planetを 1 つのnだけで綴ります。

<Object>Eclipseが追加した」ものはジェネリック型と呼ばれます。ジェネリックに関するチュートリアルを読んでください。

于 2012-06-21T11:28:35.117 に答える
3

EventDispatchThread(EDT)内でSwingコンポーネントを処理するすべてのことを行う必要があります。

new View()の呼び出しをへの呼び出しでラップしますSwingUtilities.invokeAndWait()

于 2012-06-21T11:29:45.703 に答える
2

常に呼び出しますpack()。このバージョンは確実に動作します (少なくとも表示されるまでは)。

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

public class View extends JFrame {

    static String titleText = "Calculate your Weight on another Planet";

    public View(){
        super(titleText);
        // not now!
        //setSize(500,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //setVisible(true);

        FlowLayout flo = new FlowLayout();
        setLayout(flo);

        JPanel inputData = new JPanel();

        //Labels
        JLabel lblTitle = new JLabel (titleText, JLabel.CENTER);
        lblTitle.setFont(new Font("Arial", Font.BOLD, 24));
        JLabel lblInputMass = new JLabel ("Weight", JLabel.LEFT);
        JLabel lblInputUnits = new JLabel("Units");     

        //Input Boxes and Lists
        JTextField txtInputMass = new JTextField(5);

        JComboBox comInputUnits;
        String arrUnits[] = {"Kilos", "Stone", "Pounds"};
        comInputUnits = new JComboBox(arrUnits);
        comInputUnits.setSelectedIndex(1);

        //Buttons
        JButton btnCalculate = new JButton("Calculate");

        //Append objects
        add(lblTitle);
        inputData.add(lblInputMass);
        inputData.add(txtInputMass);
        inputData.add(lblInputUnits);
        inputData.add(comInputUnits);
        inputData.add(btnCalculate);

        add(inputData);

        // force the container to layout the components.  VERY IMPORTANT!
        pack();
        setSize(500,400);
        setVisible(true);
    }

    public static void main(String[] args) {
        // This is what JB Nizet was alluding to..
        // 'start (or update) the GUI on the EDT'
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new View();
            }
        });
    }
}
于 2012-06-21T12:13:45.347 に答える
-1

これを試してください:

public static void main(String[] args) {
            View sal = new View();
            sal.setSize(500, 400);
            sal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            sal.setVisible(true);

}

コンストラクターの後に次の行をコメント化します。

super(titleText);
setSize(500,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

それが役立つことを願っています。

于 2012-06-21T11:34:16.907 に答える