将用户输入的前景色应用于 JTextArea?为什么字符串前景色不起作用


import java.applet.Applet;
import java.awt.*;
import java.util.Scanner;
import javax.swing.*;
public class font_chooser extends JApplet {
    public static void main(String[] args) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Object[] possibilities = ge.getAvailableFontFamilyNames();
        Object[] colors = { "red", "yellow", "blue", "orange", "pink", "cyan", "magenta", "black", "white", "gray" };
        String font = (String) JOptionPane.showInputDialog(null, "Choose a Font", "Font Chooser",
                +JOptionPane.PLAIN_MESSAGE, null, possibilities, "");

我将变量前景色设置为用户输入

        String foregroundcolor = (String) JOptionPane.showInputDialog(null, "Chose Font Color", "Color",
                JOptionPane.PLAIN_MESSAGE, null, colors, "");

如果用户正确选择字体和颜色,我正在打印此拼图

        if ((font != null) && (font.length() > 0) && (colors != null)) {
            JTextArea textArea = new JTextArea("The quick brown fox jumped over the lazy dog’s back."
                    + "n Pack my box with five dozen liquor jugs" + "n Jackdaws love my big sphinx of quartz."
                    + "n Mr. Jock, TV quiz PhD, bags few lynx." + "n abcdefghijklmnopqrstuvwxyz"
                    + "n ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "n 01234567890"
                    + "n €†™´¸¢©¤°÷½¼¾>¡¿«‘’<¯µ ·¬ªº¶±£"»®§­¹²³ß×™¥" + "n ÀÁÂÃÄÅÆÇÈÉ ÊËÌÍÎÏÐÑÒÓÔ ÕÖØÙÚÛÜÝÞÿ"
                    + "n àáâãäåæçèé êëìíîïðñòóô õöøùúûüýþÿ" + "n !"#$%&'()*+,-./:;<=>?@[\^_z{|}~"
                    + "n uvw wW gq9 2z 5s il17|!j oO08 `'" ;:,. m nn rn {[()]}u");
            textArea.setFont(new Font((String) font, Font.ITALIC, 16));

我将文本区域前景应用于用户输入,这似乎无法正常工作,想法?

            textArea.setForeground(Color.getColor(foregroundcolor));
            JOptionPane.showMessageDialog(null, textArea);
            // JOptionPane.showMessageDialog(null, "You chose " + font);
        }
    }
}

你误解了Color.getColor(...)方法。它采用字符串,但它是 Color int 的字符串表示形式,而不是颜色字符串的字符串表示形式。根据颜色 API:

参数被视为要获取的系统属性的名称。然后,此属性的字符串值被解释为整数,然后将其转换为 Color 对象。

请考虑使用Map<String, Color>来帮助您设置颜色。

例如(虽然丑陋,因为它使用并行数组:

import java.awt.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
public class TestColors {
    public static void main(String[] args) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Object[] possibilities = ge.getAvailableFontFamilyNames();
        String[] colors = { "red", "yellow", "blue", "orange", "pink", "cyan", "magenta", "black", "white", "gray" };
        Color[] realColors = { Color.RED, Color.YELLOW, Color.BLUE, Color.ORANGE, Color.PINK, Color.CYAN, Color.MAGENTA,
                Color.BLACK, Color.WHITE, Color.GRAY };
        Map<String, Color> colorMap = new HashMap<>();
        for (int i = 0; i < colors.length; i++) {
            colorMap.put(colors[i], realColors[i]);
        }
        String font = (String) JOptionPane.showInputDialog(null, "Choose a Font", "Font Chooser",
                +JOptionPane.PLAIN_MESSAGE, null, possibilities, "");
        String foregroundcolor = (String) JOptionPane.showInputDialog(null, "Chose Font Color", "Color",
                JOptionPane.PLAIN_MESSAGE, null, colors, "");
        System.out.println(foregroundcolor);
        if ((font != null) && (font.length() > 0) && (colors != null)) {
            JTextArea textArea = new JTextArea("The quick brown fox jumped over the lazy dog’s back."
                    + "n Pack my box with five dozen liquor jugs" + "n Jackdaws love my big sphinx of quartz."
                    + "n Mr. Jock, TV quiz PhD, bags few lynx." + "n abcdefghijklmnopqrstuvwxyz"
                    + "n ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "n 01234567890"
                    + "n €†™´¸¢©¤°÷½¼¾>¡¿«‘’<¯µ ·¬ªº¶±£"»®§­¹²³ß×™¥" + "n ÀÁÂÃÄÅÆÇÈÉ ÊËÌÍÎÏÐÑÒÓÔ ÕÖØÙÚÛÜÝÞÿ"
                    + "n àáâãäåæçèé êëìíîïðñòóô õöøùúûüýþÿ" + "n !"#$%&'()*+,-./:;<=>?@[\^_z{|}~"
                    + "n uvw wW gq9 2z 5s il17|!j oO08 `'" ;:,. m nn rn {[()]}u");
            textArea.setFont(new Font((String) font, Font.ITALIC, 16));
            textArea.setForeground(colorMap.get(foregroundcolor));
            JOptionPane.showMessageDialog(null, new JScrollPane(textArea));
            // JOptionPane.showMessageDialog(null, "You chose " + font);
        }
    }
}

请注意,

  1. 如果您的类不用作小程序,则不应扩展 JApplet。
  2. 现在没有什么应该使用小程序。

更干净一点:

import java.awt.*;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.swing.*;
public class TestColors {
    public static void main(String[] args) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Object[] possibilities = ge.getAvailableFontFamilyNames();
        Map<String, Color> myColorMap = new LinkedHashMap<>();
        myColorMap.put("Red", Color.RED);
        myColorMap.put("Orange", Color.ORANGE);
        myColorMap.put("Yellow", Color.YELLOW);
        myColorMap.put("Green", Color.GREEN);
        myColorMap.put("Blue", Color.BLUE);
        myColorMap.put("Magenta", Color.MAGENTA);
        myColorMap.put("Black", Color.BLACK);
        myColorMap.put("Gray", Color.GRAY);
        String[] myColors = myColorMap.keySet().toArray(new String[] {});
        String font = (String) JOptionPane.showInputDialog(null, "Choose a Font", "Font Chooser",
                +JOptionPane.PLAIN_MESSAGE, null, possibilities, "");
        String foregroundcolor = (String) JOptionPane.showInputDialog(null, "Chose Font Color", "Color",
                JOptionPane.PLAIN_MESSAGE, null, myColors, "");
        if ((font != null) && (font.length() > 0) && (foregroundcolor != null)) {
            JTextArea textArea = new JTextArea("The quick brown fox jumped over the lazy dog’s back."
                    + "n Pack my box with five dozen liquor jugs" + "n Jackdaws love my big sphinx of quartz."
                    + "n Mr. Jock, TV quiz PhD, bags few lynx." + "n abcdefghijklmnopqrstuvwxyz"
                    + "n ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "n 01234567890"
                    + "n €†™´¸¢©¤°÷½¼¾>¡¿«‘’<¯µ ·¬ªº¶±£"»®§­¹²³ß×™¥" + "n ÀÁÂÃÄÅÆÇÈÉ ÊËÌÍÎÏÐÑÒÓÔ ÕÖØÙÚÛÜÝÞÿ"
                    + "n àáâãäåæçèé êëìíîïðñòóô õöøùúûüýþÿ" + "n !"#$%&'()*+,-./:;<=>?@[\^_z{|}~"
                    + "n uvw wW gq9 2z 5s il17|!j oO08 `'" ;:,. m nn rn {[()]}u");
            textArea.setFont(new Font((String) font, Font.ITALIC, 16));
            textArea.setForeground(myColorMap.get(foregroundcolor));
            JOptionPane.showMessageDialog(null, new JScrollPane(textArea));
        }
    }
}

最新更新