代码不会转到下一行

时间:2015-05-06 14:22:23

标签: java swing user-interface

请帮忙。当我运行这个GUI时,数字会从帧中运行。有没有办法让它进入下一行?另外如何为此添加滚动条?我想让它垂直和水平滚动。

import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class prime extends JFrame {

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

    private TextPanel3C panel1;
    private JPanel inPanel;
    private JTextField inField;

    public prime() {
        final int width = 500;
        final int height = 500;
        setSize(width, height);
        setTitle("Find Prime Numbers");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        panel1 = new TextPanel3C();
        add(panel1, "Center");

        inPanel = new JPanel();
        inPanel.add(new JLabel("Enter Your Number", SwingConstants.RIGHT));
        inField = new JTextField(20);
        ActionListener inListener = new TextListener();
        inField.addActionListener(inListener);

        inPanel.add(inField);
        add(inPanel, "South");

        setVisible(true);
    }

    private class TextListener implements ActionListener {

        public void actionPerformed(ActionEvent event) {
            String message = inField.getText();
            inField.setText("");
            panel1.setMessage(message);
        }
    }

    class TextPanel3C extends JPanel {

        private String message;
        private Color backGroundColor;

        public TextPanel3C() {
            message = "";
            backGroundColor = Color.white;
        }

        public TextPanel3C(String x, Color background) {
            message = x;
            backGroundColor = background;
        }

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            int width = getWidth();
            int height = getHeight();
            setBackground(backGroundColor);
            g2.setColor(Color.black);
            Font x = new Font("TimesNewRoman", Font.BOLD, 20);
            g2.setFont(x);
            FontMetrics fm = g2.getFontMetrics(x);

            g2.drawString(message, 50, 50);
            if (!(message.equals(""))) {
                g2.drawString(previousPrime(message), 50, 78);
            }
        }

        public void setMessage(String message) {
            if (isPrime(Integer.parseInt(message))) {
                this.message = message + " is a prime number.";
            } else {
                this.message = message + " is not a prime number.";
            }
            repaint();
        }

        public boolean isPrime(int num) {
            for (int i = 2; i < num; i++) {
                if (num % i == 0) {
                    return false;
                }
            }
            if (num < 2) {
                return false;
            }

            return true;
        }

        public String previousPrime(String message) {
            String totalPrimeNum = "";
            int finalNum = Integer.parseInt(message.substring(0, message.indexOf(" ")));
            int count = 0;
            for (int i = 2; i < finalNum; i++) {
                if (isPrime(i)) {
                    totalPrimeNum += " " + i;
                    count++;
                }

                if (count == 10) {
                    totalPrimeNum += "\n";
                    count = 0;
                }
            }

            if (isPrime(Integer.parseInt(message.substring(0, message.indexOf(" "))))) {
                totalPrimeNum += " " + finalNum;
            }
            System.out.println(totalPrimeNum);
            return totalPrimeNum;
        }
    }
}

1 个答案:

答案 0 :(得分:5)

  • 将文本写入JTextArea,而不是paintComponent方法。
  • 声明您的JTextArea有一定数量的行和列,即JTextArea myTextArea = new JTextArea(20, 40);包含20行和40列。
  • 不要设置文本区域的大小或首选大小。
  • 通过调用append方法向其添加文本:myTextArea.append(someText + "\n");
  • 创建一个JScrolLPane并将JTextArea传递给scrollpane的构造函数,然后将滚动窗格添加到GUI。例如,JScrollPane scrollPane = new JScrollPane(myTextArea);。然后再将scrollPane添加到GUI,而不是JTextArea。请注意,您实际上并未将JTextArea添加到JScrollPane,而是添加到scrollpane的视口。
相关问题