使用Swing显示Java系统属性

8
有没有一种简单的方法,使用Java Swing,在我的工作站上显示Java系统属性名称和值?
基本上,我正在寻找一个Java Swing应用程序,它可以显示像这样的内容:

1
我刚刚意识到你在一分钟内提出了问题并回答了它。不要误会,但这有什么意义呢?(我是 SO 的新手) - Marlon Bernardes
1
@Marlon Bernardes:目前为止,得分已经超过60分了。:-) 我会在Meta上查找答案并在这里发布。答案在这里:http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-if-i-knew-the-answer-before-asking - Gilbert Le Blanc
很好知道!对于元引用加一! - Marlon Bernardes
也许你可以给Java的相关人员发送电子邮件并询问他们。 - SHIN JaeGuk
3个回答

7

在我提出/回答问题之前,我进行了搜索。我真的做到了。 - Gilbert Le Blanc
1
@GilbertLeBlanc 是的,我注意到你回答了自己的问题。 我只是认为我的答案更好,而且由于你没有提到为什么它不是你问题的答案..但如果这让你感觉更好,我知道它是什么感觉...请参见这个问题,在这里我打算把所有的问题都留给自己。最后,我不得不承认其他答案确实比我的好。你可能不同意这种情况,没有关系,但要知道——是的,我也经历过那样的事情... ;) - Andrew Thompson
@Andrew Thompson:没问题。你的回答更好。我已经花了一整周才爬到20k,而这个问题/答案只需要10分钟就能解决。 :-) - Gilbert Le Blanc
顺便说一句,给你的回答点个赞。我必须承认,工具提示是一个不错的点子。 :) 顺便恭喜你达到了2万! - Andrew Thompson

5

代码非常简单。在JFrame内创建一个JScrollPane,然后在其中创建一个JTable。

我需要输入几行代码来为JTable构建表格模型。我对属性名称进行了排序,以便更容易找到它们。

JTable prepareRenderer方法的覆盖显示了所有单元格的工具提示。需要工具提示显示的单元格是具有路径字符串的两个值单元格。

您系统上的系统属性名称可能与其他系统上的系统属性名称不同。Windows和Unix各自拥有自己独特的系统属性名称集。

import java.awt.Component;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class SystemProperties implements Runnable {

    @Override
    public void run() {
        JFrame frame = new JFrame("System Properties");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTable table = new JTable(createSystemPropertiesTableModel()) {
            private static final long   serialVersionUID    = 4957089825220999913L;

            @Override
            public Component prepareRenderer(TableCellRenderer renderer,
                    int row, int column) {
                Component c = super.prepareRenderer(renderer, row, column);
                if (c instanceof JComponent) {
                    JComponent jc = (JComponent) c;
                    String s = getValueAt(row, column).toString();
                    jc.setToolTipText(s);
                }
                return c;
            }
        };
        JScrollPane scrollPane = new JScrollPane(table);
        frame.add(scrollPane);

        frame.pack();
        frame.setVisible(true);
    }

    private DefaultTableModel createSystemPropertiesTableModel() {
        DefaultTableModel model = new DefaultTableModel();

        model.addColumn("Property");
        model.addColumn("Value");

        Properties p = System.getProperties();
        Set<Object> keys = p.keySet();
        SortedSet<Object> sortedKeys = new TreeSet<Object>(keys);
        Iterator<Object> iter = sortedKeys.iterator();

        while (iter.hasNext()) {
            String key = iter.next().toString();
            String value = p.getProperty(key);
            String[] row = { key, value };
            model.addRow(row);
        }

        return model;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new SystemProperties());
    }

}

+1 用于工具提示;另请参阅使用 AbstractTableModel 的相关示例 - trashgod

2
您可以使用 System.getProperties() 访问系统属性。然后,您只需迭代它的键并按照您想要的方式操作数据即可。
public static void main(String[] args) {
    Properties systemProperties = System.getProperties();
    Enumeration<?> e = systemProperties.propertyNames();

    while (e.hasMoreElements()) {
        String key = (String) e.nextElement();
        String value = systemProperties.getProperty(key);
        System.out.println(key + " -- " + value);
    }
}

你可能想要对该值进行子字符串操作,特别是在路径属性上。 - Gilbert Le Blanc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接