2013-06-28 66 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

您可能想要對該值進行子串處理,特別是在路徑屬性上。 –