Создание JTextFields в a для l oop для поэтапного вычисления pow числа - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть JFrame, в котором пользователь должен вводить 2 числа, и полномочия этого числа должны отображаться шаг за шагом.

Это то, что я до сих пор:

enter image description here

Вот как это должно выглядеть:

enter image description here

Проблема в этой строке:

txt3.setText(output);

, потому что он просто записывает одну строку в JFrame.

Как добавить вывод на JFrame, как на картинке выше?

Вот код:

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

public class PotenzFrame extends JFrame {

    private Toolkit toolkit;

    public PotenzFrame() {
        setSize(620, 500);

        toolkit = getToolkit();
        Dimension size = toolkit.getScreenSize();
        setLocation((size.width - getWidth())/2, (size.height -getHeight())/2);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        getContentPane().add(panel);

        panel.setLayout(null);

        JLabel label = new JLabel("Potenzen");
        // label.setPreferredSize(new Dimension(50, 50));
        label.setBounds(80,0,80,80);

        JLabel lbl1 = new JLabel("zahl");
        lbl1.setBounds(30,70,80,30);

        JLabel lbl2 = new JLabel("ende");
        lbl2.setBounds(30,120,110,30);

        JLabel lbl3 = new JLabel("Potenzen:");
        lbl3.setBounds(300,150,80,30);

        final JTextField txt1 = new JTextField(5);
        txt1.setBounds(145,70,50,30);
        txt1.setText("0");
        final JTextField txt2 = new JTextField(5);
        txt2.setBounds(145,120,50,30);
        txt2.setText("0");
        final JTextField txt3 = new JTextField(5);
        txt3.setBounds(300,200,200,200);

        JButton comp = new JButton("Potenzen berechnen");
        comp.setBounds(20, 400, 200, 30);
        comp.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                int a1 = Integer.parseInt(txt1.getText());
                int a2 = Integer.parseInt(txt2.getText());
                String output;
                int multiplied;

                for(int i = 1; i <= a2; i++){
                    multiplied = (int) Math.pow(a1, i);
                    output = a1 + " hoch " + i + " ist " + multiplied;
                    txt3.setText(output);
                    System.out.println(output);
                }
            }
        });

        panel.add(label);
        panel.add(lbl1);
        panel.add(lbl2);
        panel.add(lbl3);
        panel.add(txt1);
        panel.add(txt2);
        panel.add(txt3);
        panel.add(comp);
    }

    public static void main(String[] args) {
        PotenzFrame buttons = new PotenzFrame();
        buttons.setVisible(true);
    }
}

Я попробовал следующее, но это не так работать либо:

for(int i = 1; i <= a2; i++){
    multiplied = (int) Math.pow(a1, i);
    output = a1 + " hoch " + i + " ist " + multiplied;
    JTextField txt = new JTextField(i+4);
    txt.setText(output);
    panel.add(txt);
    System.out.println(output);
}

1 Ответ

1 голос
/ 05 февраля 2020

Измените JTextField на JTextArea, чтобы иметь возможность иметь несколько строк текста, а не только одну строку текста.

final JTextArea txt3 = new JTextArea();
txt3.setBounds(300,200,200,200);

Затем в вашем l oop измените txt3.setText (output ) к txt3.append (output + "\ n").

for(int i = 1; i <= a2; i++){
    multiplied = (int) Math.pow(a1, i);
    output = a1 + " hoch " + i + " ist " + multiplied;
    txt3.append(output + "\n");
    System.out.println(output);
}

append () добавляет текст в вашу TextArea, а не заменяет текст на setText (), а "\ n" добавляет новую строку после добавления текста.

...