1

プレフィックス式プログラムに GUI を使用しています。プログラム自体は問題なく動作しますが、GUI に少し問題があります。実行すると、結果ラベルが表示されません。私はすべてを試しましたが、なぜそれが機能しないのかわかりません。どんな助けでも大歓迎です。ありがとう!

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;
import javax.swing.*;


public class PrefixExpression extends JFrame
{
    private JPanel panel;
    private JTextField expression;
    private JLabel title;
    private JLabel instruction;
    private JLabel results;
    private final int WIDTH = 310;
    private final int HEIGHT = 175;
    private JButton calculateBtn;

    public PrefixExpression()
    {
        setTitle("Prefix Expression Calculator");
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        buildPanel();
        add(panel);
        setVisible(true);
    }

    private void buildPanel()
    {
        title = new JLabel("Calculating Prefix Expressions");
        instruction = new JLabel("Please enter your expression");
        expression = new JTextField(10);
        calculateBtn = new JButton("Calculate");
        calculateBtn.addActionListener(new ButtonListener());

        panel = new JPanel();
        panel.add(title);
        panel.add(instruction);
        panel.add(expression);
        panel.add(calculateBtn);

    }


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



    private class ButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            Stack <Integer> numberStack = new Stack <Integer>();
            Stack <Character> operatorStack = new Stack <Character>();


            String input = expression.getText();

            StringTokenizer strToken = new StringTokenizer(input, " ", false);


            while (strToken.hasMoreTokens())
            {
                String i = strToken.nextToken();
                int number;
                char operator;

                try
                {
                    number = Integer.parseInt(i);
                    numberStack.push(number);
                }
                catch (NumberFormatException nfe)
                {
                    operator = i.charAt(0);
                    operatorStack.push(operator);
                }
            }

            int answer = calculateMethod(numberStack, operatorStack);
            results = new JLabel("Here is your answer: " + answer); 
            panel.add(results);  //This is where the results label is added to panel
     }

        public int calculateMethod(Stack <Integer> numberStack, Stack <Character> operatorStack)
        {
            int result = 0;
            while(! numberStack.empty())
            {
                char operator = (char) operatorStack.pop();
                if (operator == '+')
                    result = addition(numberStack);
                else if (operator == '*')
                    result = multiplication(numberStack);
            }

            return result;
        }

        public int addition(Stack <Integer> numberStack)
        {
            int numb1 = (int) numberStack.pop();
            int numb2 = (int) numberStack.pop();
            int answer = numb1 + numb2;
            return answer;
        }

        public int multiplication(Stack <Integer> numberStack)
        {
            int numb1 = (int) numberStack.pop();
            int numb2 = (int) numberStack.pop();
            int answer = numb1 * numb2;
            return answer;
        }
    }
}
4

3 に答える 3

2

panel.add(結果); //ここに結果ラベルがパネルに追加されます

可視 GUI にコンポーネントを追加するときは、次のことを行う必要があります。

panel.revalidate();
panel.repaint();

これにより、レイアウト マネージャーが呼び出され、コンポーネントのサイズが適切に調整されます。

于 2013-04-08T15:55:54.507 に答える
0

結果が計算される前に、JPanel のレイアウトをフロー レイアウト以外のものに変更し、結果 JLabel を作成してパネルに追加します。results.setText(answer);すべての結果をパネルに表示したい場合を除き、完了後に結果を表示するには、を使用するだけです。

于 2013-04-08T15:59:56.103 に答える