有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将JTextArea与此一起使用,以及如何附加?

请帮忙。当我运行这个GUI时,数字会从框架中消失。我知道我必须使用JTextArea和append,但是我应该把它放在我的代码中的什么地方呢。有人能用简单的语言向我解释一下吗?我想让它垂直和水平滚动

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 TextPanel panel;
      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);

          panel = new TextPanel();
          add(panel, "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("");
              panel.setMessage(message); }
      }



  class TextPanel extends JPanel
  {
        private String message;
        private Color  backGroundColor;

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

        public TextPanel(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) 个答案

  1. # 1 楼答案

    TextPanel替换为JTextArea,将JTextArea包装为JScrollPane

    private JTextArea panel;
    //...
    
    panel = new JTextArea(20, 10);
    add(new JScrollPane(panel), "Center");
    

    使用setTextappend更新JTextArea。您需要从现有的TextPanel中提取计算代码并重新使用

    有关详细信息,请参见How to Use Text AreasHow to Use Scroll Panes