0

javaで質問文を作りたいです。これが私のコードです:

import java.awt.*;
import java.awt.Event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Chestionar extends JFrame {

public Chestionar() {
    super("Chestionar");
    final int x, y, z;
    x = y = z = 0;
    String ch1;

    JPanel jp = new JPanel();
    JLabel jl = new JLabel("Name:");
    JTextField jtf = new JTextField(10);

    ch1 = jtf.getText();

    jp.add(jl);
    jp.add(jtf);

    add(jp);

    JPanel jp1 = new JPanel();
    JLabel jl1 = new JLabel();
    String s = "Welcome";
    jl1.setText(s);

    jp1.add(jl1);
    add(jp1);

    //first question
    final JPanel jp2 = new JPanel();
    JLabel jl2 = new JLabel("What is called as the roof of the world? 1.Nepal 2.Tibet etc");  
    final JComboBox jcb = new JComboBox();
        for(int i=0; i<5; i++){
            jcb.addItem(i);
        }


        ActionListener alege = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if(jcb.getSelectedItem().toString().equals("2")){

                JLabel bine = new JLabel("Right");

                jp2.add(bine);

            } else {

                JLabel gresit = new JLabel("Wrong");

                jp2.add(gresit);

            }


            }
        };


        jcb.addActionListener(alege);
        jp2.setLayout(new FlowLayout());
        jp2.add(jl2);
        jp2.add(jcb);


    add(jp2);
    setVisible(true);
    setLayout(new GridLayout(4, 1));
    setSize(600, 600);
}

public static void main(String arg[]) {
    Chestionar ch = new Chestionar();
}
}

から選択したアイテムに応じて「正しい」または「間違っている」JLabelを表示させたいJComboBox。メインフレームのサイズを変更した場合にのみJComboBox、特定のアイテムから選択するアイテムが表示されない場合、その理由はわかりません。JLabel

4

2 に答える 2

4

あなたはあなたのためにが解雇されるたびJLabelにあなたに新しいものを追加することを追加しています。パネルのサイズを変更(または+ )するまで、ラベルは表示されません。JPanel jp2ActionEventJComboBoxrevalidaterepaint

シングルを追加し、JLabel代わりにを呼び出してこれを更新することをお勧めしsetTextます。このアプローチでは、repaint次の呼び出しは必要ありません。

Integer selectedItem = (Integer) jcb.getSelectedItem();
switch (selectedItem) {
   case 2: // currently using 2 for correct answers...
      answerStatusLabel.setText("Right");
      break;

   default:
      answerStatusLabel.setText("Wrong");
      break;
}
于 2013-01-13T00:03:04.827 に答える
0

JLabelを更新する必要があります。raven1981が提案したようにjp2.repaint()を実行するか、Reimeusが提案したようにsetTextを呼び出します。

于 2013-01-13T00:07:08.143 に答える