javax.swing.UIManager.getIcon(对象键) returns 当字符串键从 ArrayList 流式传输时为 null
javax.swing.UIManager.getIcon(Object key) returns null when String-keys are streamed from an ArrayList
我想达到的目标:
我想可视化 javax.swing.UIManager
中的一些 javax.swing.Icon
。在互联网上,我找到了一个 UIManager
-keys 列表,它不仅会 return Icons
,还会 Strings
、Colors
等等。因此,在这一步中,我想过滤键列表,因此只保留 Icon
-键。
我的方法:
我将 UIManager
键的列表复制到一个文本文件中,并将其作为资源包含在我的 Java-Project 中。我成功读取了文件,所以我按行拆分文件内容并将它们添加到 Strings
的 ArrayList
中。现在我想流式传输此 ArrayList
的内容并通过 UIManager.getIcon(Object key)
-Method returns null
或不...
过滤密钥
我的问题
到目前为止:UIManager
总是 returns null
。我将所有键和 UIManager
结果打印到控制台( 请参阅我的代码 "Output / Test - stream keys" 中的 )。如果我从控制台手动复制一个密钥(我知道应该可以工作的那个)并将其粘贴到完全相同的代码段中,它实际上可以工作(请参阅我的代码中的"Output / Test - single Key").
有趣的行为 当我将 String
附加到要打印到控制台的键时显示(请参阅变量 "suffix" 在我的代码 "Output / Test - stream Keys" 下 )。如果变量 suffix
不是以 "\n" 开头的,流中的以下 print-Method 将只打印 suffix
而不再显示其他内容。例如,如果我键入 String suffix = "test";
,只有 "test" 会从 .forEach(key->System.out.println(... + key + suffix);
中打印出来,但是,这种行为不会出现在 "Output / Test - single Key"-示例中。
我不知道发生了什么,或者(在我看来)奇怪的行为是否与问题有关。我感谢任何形式的帮助!
来自"UIManagerKeys.txt"的片段:
这里有一些用于测试和可重复性目的的键...
FileView.computerIcon
FileView.directoryIcon
FileView.fileIcon
FileView.floppyDriveIcon
FileView.hardDriveIcon
FormattedTextField.background
FormattedTextField.border
windowText
我的代码:
package main;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.UIManager;
public class Main {
public Main() {
}
public static void main(String args[]) {
ArrayList<String> uiKeys = new ArrayList<>();
String fileName = "recources/UIManagerKeys.txt";
ClassLoader classLoader = new Main().getClass().getClassLoader();
File file = new File(classLoader.getResource(fileName).getFile());
// Check: is File found?
System.out.println("File Found : " + file.exists());
try {
// Read File Content
String content = new String(Files.readAllBytes(file.toPath()));
// Split by line and collect
String[] keys = content.split("\n");
uiKeys.addAll(Arrays.asList(keys));
} catch (IOException e) {
System.out.println("Error: " + e);
}
// Output / Test - stream Keys
System.out.println("Total Number of Keys: " + uiKeys.size());
String suffix = ""; // Interesting behavior when String is not empty
uiKeys.stream()
.map(key -> key.replaceAll(" ", "").replaceAll("\n", "")) // Just to be sure
.forEach(key -> System.out.println("IconFound: " + (UIManager.getIcon(key) != null) + "\tKey: " + key + suffix));
// Output / Test - single Key
System.out.println("\n");
String key = "FileView.directoryIcon"; // Copied from console
System.out.println("IconFound: " + (UIManager.getIcon(key) != null) + "\tKey: " + key + suffix);
}
}
I want to visualize some javax.swing.Icons from the javax.swing.UIManager.
I copied a list of UIManager keys into a textfile
无需创建文本文件。您只需从 UIManager 获取所有属性并检查对象是否为图标:
public static void main(String[] args) throws Exception
{
UIDefaults defaults = UIManager.getLookAndFeelDefaults();
for ( Enumeration enumm = defaults.keys(); enumm.hasMoreElements(); )
{
Object key = enumm.nextElement();
Object value = defaults.get( key );
if (value instanceof Icon)
System.out.println( key );
}
}
On the internet I've found a list of UIManager-keys,
查看:UIManager Defaults 显示所有属性的小图形工具。
您读取文件的方法似乎有点复杂。这是将文件的行读入 ListArray 的简单方法:
import java.io.*;
import java.util.*;
public class ReadFile
{
public static void main(String [] args) throws Exception
{
ArrayList<String> lines = new ArrayList<String>();
BufferedReader in = new BufferedReader( new FileReader( "ReadFile.java" ) );
String line;
while((line = in.readLine()) != null)
{
lines.add(line);
}
in.close();
System.out.println(lines.size() + " lines read");
}
}
我想达到的目标:
我想可视化 javax.swing.UIManager
中的一些 javax.swing.Icon
。在互联网上,我找到了一个 UIManager
-keys 列表,它不仅会 return Icons
,还会 Strings
、Colors
等等。因此,在这一步中,我想过滤键列表,因此只保留 Icon
-键。
我的方法:
我将 UIManager
键的列表复制到一个文本文件中,并将其作为资源包含在我的 Java-Project 中。我成功读取了文件,所以我按行拆分文件内容并将它们添加到 Strings
的 ArrayList
中。现在我想流式传输此 ArrayList
的内容并通过 UIManager.getIcon(Object key)
-Method returns null
或不...
我的问题
到目前为止:UIManager
总是 returns null
。我将所有键和 UIManager
结果打印到控制台( 请参阅我的代码 "Output / Test - stream keys" 中的 )。如果我从控制台手动复制一个密钥(我知道应该可以工作的那个)并将其粘贴到完全相同的代码段中,它实际上可以工作(请参阅我的代码中的"Output / Test - single Key").
有趣的行为 当我将 String
附加到要打印到控制台的键时显示(请参阅变量 "suffix" 在我的代码 "Output / Test - stream Keys" 下 )。如果变量 suffix
不是以 "\n" 开头的,流中的以下 print-Method 将只打印 suffix
而不再显示其他内容。例如,如果我键入 String suffix = "test";
,只有 "test" 会从 .forEach(key->System.out.println(... + key + suffix);
中打印出来,但是,这种行为不会出现在 "Output / Test - single Key"-示例中。
我不知道发生了什么,或者(在我看来)奇怪的行为是否与问题有关。我感谢任何形式的帮助!
来自"UIManagerKeys.txt"的片段: 这里有一些用于测试和可重复性目的的键...
FileView.computerIcon
FileView.directoryIcon
FileView.fileIcon
FileView.floppyDriveIcon
FileView.hardDriveIcon
FormattedTextField.background
FormattedTextField.border
windowText
我的代码:
package main;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.UIManager;
public class Main {
public Main() {
}
public static void main(String args[]) {
ArrayList<String> uiKeys = new ArrayList<>();
String fileName = "recources/UIManagerKeys.txt";
ClassLoader classLoader = new Main().getClass().getClassLoader();
File file = new File(classLoader.getResource(fileName).getFile());
// Check: is File found?
System.out.println("File Found : " + file.exists());
try {
// Read File Content
String content = new String(Files.readAllBytes(file.toPath()));
// Split by line and collect
String[] keys = content.split("\n");
uiKeys.addAll(Arrays.asList(keys));
} catch (IOException e) {
System.out.println("Error: " + e);
}
// Output / Test - stream Keys
System.out.println("Total Number of Keys: " + uiKeys.size());
String suffix = ""; // Interesting behavior when String is not empty
uiKeys.stream()
.map(key -> key.replaceAll(" ", "").replaceAll("\n", "")) // Just to be sure
.forEach(key -> System.out.println("IconFound: " + (UIManager.getIcon(key) != null) + "\tKey: " + key + suffix));
// Output / Test - single Key
System.out.println("\n");
String key = "FileView.directoryIcon"; // Copied from console
System.out.println("IconFound: " + (UIManager.getIcon(key) != null) + "\tKey: " + key + suffix);
}
}
I want to visualize some javax.swing.Icons from the javax.swing.UIManager.
I copied a list of UIManager keys into a textfile
无需创建文本文件。您只需从 UIManager 获取所有属性并检查对象是否为图标:
public static void main(String[] args) throws Exception
{
UIDefaults defaults = UIManager.getLookAndFeelDefaults();
for ( Enumeration enumm = defaults.keys(); enumm.hasMoreElements(); )
{
Object key = enumm.nextElement();
Object value = defaults.get( key );
if (value instanceof Icon)
System.out.println( key );
}
}
On the internet I've found a list of UIManager-keys,
查看:UIManager Defaults 显示所有属性的小图形工具。
您读取文件的方法似乎有点复杂。这是将文件的行读入 ListArray 的简单方法:
import java.io.*;
import java.util.*;
public class ReadFile
{
public static void main(String [] args) throws Exception
{
ArrayList<String> lines = new ArrayList<String>();
BufferedReader in = new BufferedReader( new FileReader( "ReadFile.java" ) );
String line;
while((line = in.readLine()) != null)
{
lines.add(line);
}
in.close();
System.out.println(lines.size() + " lines read");
}
}