2013-06-28 62 views
7

使用Java Swing在我的工作站上显示Java系统属性名称和值有没有简单的方法?使用Swing显示Java系统属性

基本上,我正在寻找的是一个显示这样的一个Java Swing应用程序:

System Properties

+0

我只是意识到,你问的问题和一分钟后回答了这个问题。不要误会我的意思,但有什么意义? (我是新来的) –

+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 –

+0

这很好知道! +1元参考! –

回答

7
+0

在我询问/回答问题之前,我做了一个搜索。我真的做到了。 –

+1

+1,我不记得以前看过那篇文章。 – camickr

+0

@GilbertLeBlanc是的,我*确实*注意到你回答了你自己的问题。我只是觉得我的回答比较好,因为你没有提到它为什么是**而不是**也是你的问题的答案。但是如果它让你感觉好一些,我知道它是什么感觉..见[这个问题](http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing)对于一个问答我打算保留所有的自己。最后,我不得不承认,其他答案确实比我自己的答案好。在这种情况下,你可能不会同意,没有伤害,但只是知道 - 是的,我一直在那里......) –

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()); 
    } 

} 
+0

工具提示+1;使用'AbstractTableModel'参见这个相关的[例子](http://stackoverflow.com/a/9134371/230513)。 – 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); 
    } 
} 
+0

您可能想要对该值进行子串处理,特别是在路径属性上。 –