【问题标题】:How to use JTextArea with this and how to append?如何使用 JTextArea 以及如何附加?
【发布时间】:2015-05-07 06:41:02
【问题描述】:

请帮忙。当我运行这个 GUI 时,数字会超出框架。我知道我必须使用 JTextArea 并附加,但我应该把它放在我的代码中的什么地方。有人可以简单地向我解释并告诉我吗?我想让它垂直和水平滚动?

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;
                }}}

【问题讨论】:

标签: java swing jtextarea


【解决方案1】:

将您的TextPanel 替换为JTextArea,将JTextArea 包装在JScrollPane 中

private JTextArea panel;
//...

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

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

请参阅How to Use Text Areas 和How to Use Scroll Panes 了解更多详情

【讨论】:

  • 你能解释一下如何设置文本或附加吗?
  • JTextArea#setText(String) 和 JTextArea#append(String),就像 JTextField...
  • 我收到此错误:错误:找不到符号 panel.setMessage(message);
  • 是的,JTextArea 没有这种方法,正如我所说,您需要采用计算素数的方法并移至 prime 类或(最好)制作一个包含它们的新类,它可以返回一个结果,您可以使用它来更新JTextArea 或(通过将JTextArea 的引用传递给它)更新JTextArea 本身(我更喜欢第一个选项)
猜你喜欢
  • 2014-03-06
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2023-03-30
  • 2012-08-09
相关资源
最近更新 更多