по-разному раскрасить несколько строк текста, используя JTextArea и StringBuilder - PullRequest
0 голосов
/ 25 января 2019

Итак, у меня есть проект Java, чтобы узнать о массивах. Проект завершен, и я хотел бы отобразить результат в графическом интерфейсе с помощью JFrame. Все работает отлично. Я пробовал много способов покрасить линии по отдельности, но только выяснил, как покрасить весь текст области.

Вот мой код:

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 Jannis Wedjelek");
    // 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");
    }
}

Я с нетерпением жду помощи или предложений от вас, ребята, спасибо заранее.

1 Ответ

0 голосов
/ 25 января 2019

Некоторое время назад я делал подобное.

Если вы используете JEditorPane , вы можете отобразить содержимое в формате HTML. Вы можете изменить стиль линий, чтобы изменить цвет шрифта.

Используйте это:

myPane.setContentType("text/html");

Если вы хотите изменить цвет отдельной строки, используйте этот синтаксис:

<font color=\"myColor\"> myNumber </font>

Это должно быть внутри тега html.

Если вы хотите создать более сложное и богатое графикой приложение, используйте JavaFX.

...