java - 使用 JTextArea 和 StringBuilder 对多行文本进行不同的着色
问题描述
我有一个 Java 项目来了解数组。该项目已完成,我想在 GUI 上使用JFrame
. 一切都运行良好。我已经尝试了许多单独为线条着色的方法,但只知道如何为整个textArea
.
这是我的代码:
public class Array {
private JFrame jFrame;
private JTextArea textArea;
private JScrollPane scrollPane;
private Font font1;
static int numberCount = 1000;
static int numberRange = 1000;
static StringBuilder sb = new StringBuilder();
public Array() {
jFrame = new JFrame("Random Prim Array Aufgabe");
// jFrame.getContentPane().setLayout(new FlowLayout());
font1 = new Font("SansSerif", Font.BOLD, 20);
textArea = new JTextArea();
textArea.setLineWrap(true);
scrollPane = new JScrollPane(textArea);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
}
public void launchFrame() { // Create Layout
jFrame.getContentPane().add(scrollPane);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.pack();
jFrame.setSize(600, 600);
jFrame.setVisible(true);
jFrame.setResizable(false);
textArea.setFont(font1);
textArea.setText(sb.toString());
jFrame.add(scrollPane);
}
public static void main(String[] args) {
int[] randomNumbersArray = generateRandom(numberCount);
int primeCount = getPrimeNumberCount(randomNumbersArray);
@SuppressWarnings("unused")
int[] uniquePrimeArray = getPrimeArray(randomNumbersArray, primeCount);
evenPercentage(randomNumbersArray);
minMax(randomNumbersArray);
Array gui = new Array();
gui.launchFrame();
}
private static void minMax(int[] randomNumbersArray) {
int min = numberRange;
int max = 0;
for (int number : randomNumbersArray) {
if (number > max) {
max = number;
}
if (number < min) {
min = number;
}
}
appendString("Das Maximum ist: " + max + ", das Minimum ist: " + min);
}
private static void evenPercentage(int[] randomNumbersArray) {
int evenCount = 0;
for (int number : randomNumbersArray) {
// teilbarkeit durch 2 prüfen
if (number % 2 == 0) {
evenCount++;
}
}
appendString(((float) evenCount * 100) / (float) randomNumbersArray.length + "% der Zahlen sind gerade");
}
private static int[] getPrimeArray(int[] randomNumbersArray, int primeCount) {
int[] primeArray = new int[primeCount];
int uniquePrimeCount = 0;
// alle zahlen durchgehen
for (int number : randomNumbersArray) {
// nachschauen ob es eine Primzahl ist
boolean isPrime = isPrime(number);
if (isPrime) {
// nachschauen ob primzahl schon in ausgabearray ist
boolean isAlreadyInArray = false;
for (int number2 : primeArray) {
if (number2 == number) {
isAlreadyInArray = true;
}
}
// wenn sie noch nicht drin ist hinzufügen
if (!isAlreadyInArray) {
primeArray[uniquePrimeCount] = number;
uniquePrimeCount++;
}
}
}
// array anlegen mit größe von Primzahlanzahl
int[] uniquePrimeArray = new int[uniquePrimeCount];
for (int i = 0; i < uniquePrimeCount; i++) {
uniquePrimeArray[i] = primeArray[i];
}
appendString(Arrays.toString(uniquePrimeArray));
return primeArray;
}
private static int getPrimeNumberCount(int[] randomNumbersArray) {
int primeCount = 0;
for (int number : randomNumbersArray) {
boolean isPrime = isPrime(number);
if (isPrime) {
appendString(number + " ist prim");
primeCount++;
}
}
appendString("Es gibt " + primeCount + " Primzahlen in dem Array von " + numberCount + " insgesamt");
return primeCount;
}
private static int[] generateRandom(int numberCount) {
int[] randomNumbers = new int[numberCount];
for (int number = 0; number < randomNumbers.length; number++) {
int random = (int) (Math.random() * numberRange + 1);
randomNumbers[number] = random;
}
return randomNumbers;
}
private static boolean isPrime(int number) {
for (int divisor = 2; divisor < number; divisor++) {
if (number % divisor == 0) {
return false;
}
}
return true;
}
public static void appendString(String s) {
sb.append(s);
sb.append("\n");
}
}
解决方案
前段时间我做过类似的事情。
如果您使用JEditorPane,则可以将内容显示为 HTML。您可以更改线条的样式以更改字体颜色。
用这个:
myPane.setContentType("text/html");
如果要更改单行的颜色,请使用以下语法:
<font color=\"myColor\"> myNumber </font>
这应该在 html 标记内。
如果您想创建更复杂且图形丰富的应用程序,请使用 JavaFX。
推荐阅读
- go - 去 tcpdump 的“exec.Command” 什么都不做
- google-api - 如何从多个 Google OAuth 同意屏幕切换到单个页面
- html - 实现复制按钮功能
- networking - 如何从其他 pod 解析 pod 主机名?
- c# - 复选框上奇怪的灰色背景
- spring-boot - 通过spring数据导入数据到neo4j graphDB
- ruby-on-rails - 将一个模型作为属性传递给另一个模型
- pycharm - 在pycharm中关闭python 3.5警告
- node.js - Azure B2C 微服务身份验证和 GraphQL 层
- java - 方法链接,从列表中返回一个对象并从中获取值