2013-06-28 13 views
7

C'è un modo semplice, utilizzando Java Swing, per visualizzare i nomi e i valori delle proprietà del sistema Java sulla mia workstation?Visualizzazione delle proprietà del sistema Java con Swing

In sostanza, quello che sto cercando è un'applicazione Java Swing che consente di visualizzare qualcosa di simile:

System Properties

+0

Ho appena realizzato che lei ha chiesto la domanda e ha risposto che un minuto dopo. Non fraintendermi, ma qual è il punto? (Sono nuovo di SO) –

+1

@Marlon Bernardes: Finora. +60 punti. :-) Cercherò la risposta su meta e postarla qui. Ed eccolo qui: http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-if-i-knew-the-answer-before-asking –

+0

Questo va bene per conoscere! +1 per il meta riferimento! –

risposta

7
+0

Ho fatto una ricerca prima di chiedere/ho risposto alla domanda. L'ho fatto davvero. –

+1

+1, non ricordo di aver visto quella pubblicazione prima. – camickr

+0

@GilbertLeBlanc Sì, io * ho * notato che hai risposto alla tua stessa domanda. Ho solo pensato che la mia risposta fosse migliore, e visto che non hai menzionato il motivo per cui non era ** anche una risposta alla tua domanda .. Ma se ti fa sentire meglio, so come ci si sente .. Vedi [questa domanda ] (http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing) per un Q & A che intendevo tenere tutto per me. Alla fine ho dovuto ammettere che l'altra risposta era davvero migliore della mia. Potresti non essere d'accordo in questo caso, nessun danno fatto, ma solo sapere - sì, sono stato lì ..;) –

5

Il codice è abbastanza semplice. Crea un JTable all'interno di un JScrollPane, all'interno di un JFrame.

Ho dovuto digitare alcune righe di codice per creare un modello di tabella per JTable. Ho ordinato i nomi delle proprietà per renderle più facili da trovare.

L'override del metodo JTable prepareRenderer mostra i suggerimenti degli strumenti per tutte le celle. Le celle che richiedono la visualizzazione della descrizione dell'utensile sono le due celle di valore con stringhe di percorso.

I nomi delle proprietà di sistema sul sistema potrebbero non corrispondere ai nomi delle proprietà di sistema su altri sistemi. Windows e Unix hanno ciascuno il proprio set unico di nomi di proprietà di sistema.

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 per suggerimenti; vedi anche questo relativo [esempio] (http://stackoverflow.com/a/9134371/230513) usando 'AbstractTableModel'. – trashgod

2

È possibile accedere alle proprietà di sistema utilizzando System.getProperties(). Quindi tutto quello che devi fare è iterare le sue chiavi e manipolare i dati nel modo desiderato.

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

Si potrebbe desiderare di sottostrare tale valore, in particolare sulle proprietà del percorso. –