gpt4 book ai didi

java - 如何使用 JTextArea 和 Append

转载 作者:行者123 更新时间:2023-12-01 11:35:00 25 4
gpt4 key购买 nike

请帮忙。当我运行这个 GUI 时,数字会超出框架。我知道我必须使用 JTextArea 并 append ,但是我应该将其放在代码中的哪里。有人可以用简单的术语向我解释并向我展示吗?我想让它垂直和水平滚动,当我添加 JTextArea 时,我收到此错误:错误:找不到符号 panel.setMessage(message);

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 JTextArea 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 JTextArea(20, 10);
add(new JScrollPane(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;
}}}

最佳答案

看看你拥有什么以及你想要实现什么。您有一个方法可以验证一个值是否为素数,但它不会产生任何输出。您有一个 JTextArea,它允许您向其中添加内容。

你有一个方钉和一个圆孔。其中一件事需要改变。您可以控制 setMessage 方法,但无法控制 JTextArea,这表明 setMessage 需要更改。虽然您可以将 JTextArea 传递给 setMessage 方法,但更好的解决方案是更改 setMessage 以返回某种有意义的值,或者简单地返回摆脱它,转而使用 isPrime 方法

使用您的 TestPane 并将用于计算和测试素数的功能移至新类,例如...

public class PrimeCalculator {

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) {
StringBuilder totalPrimeNum = new StringBuilder(128);
int finalNum = Integer.parseInt(message.substring(0, message.indexOf(" ")));
int count = 0;
for (int i = 2; i < finalNum; i++) {
if (isPrime(i)) {
totalPrimeNum.append(" ").append(i);
count++;
}

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

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

现在,这不会对您想要执行的操作做出任何假设,而只是产生输出。您现在可以使用这些方法并决定如何使用输出,例如......

private class TextListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent event) {
PrimeCalculator calc = new PrimeCalculator();
String message = inField.getText();
inField.setText("");
String text = message + " is not a prime number\n";
try {
if (calc.isPrime(Integer.parseInt(message))) {
text = message + " is a prime number\n";
}
} catch (NumberFormatException exp) {
text = message + " is not a valid integer\n";
}
panel.append(message);
panel.setCaretPosition(panel.getDocument().getLength());
}
}

有时,您需要重新考虑您的设计以支持您想要实现的目标。

验证和计算素数的过程应该做到这一点,他们不应该做任何其他事情(比如更新屏幕),这样你就可以解耦代码并以你没有的不同方式重新使用它最初的想法(比如输出到文件或网络)

参见How to Use Text AreasHow to Use Scroll Panes了解更多详情

关于java - 如何使用 JTextArea 和 Append,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30089601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com