2013-06-28 79 views
7

Có cách nào dễ dàng, sử dụng Java Swing, để hiển thị tên và giá trị thuộc tính hệ thống Java trên máy trạm của tôi không?Hiển thị các thuộc tính hệ thống Java với Swing

Về cơ bản, những gì tôi đang tìm kiếm là một ứng dụng Swing Java để hiển thị một cái gì đó như thế này:

System Properties

+0

Tôi vừa nhận ra rằng bạn đã đặt câu hỏi và trả lời nó một phút sau đó. Đừng hiểu lầm tôi, nhưng vấn đề là gì? (Tôi mới tham gia SO) –

+1

@Marlon Bernardes: Cho đến nay. +60 điểm. :-) Tôi sẽ tìm câu trả lời trên meta và đăng nó ở đây. Và đây là: http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-if-i-knew-the-answer-before-asking –

+0

Điều đó tốt cho biết! +1 để tham khảo meta! –

Trả lời

7
+0

Tôi đã thực hiện tìm kiếm trước khi tôi hỏi/trả lời câu hỏi. Tôi thực sự đã làm. –

+1

+1, tôi không nhớ đã xem bài đăng đó trước đây. – camickr

+0

@GilbertLeBlanc Có, tôi đã * thông báo rằng bạn đã trả lời câu hỏi của riêng bạn. Tôi chỉ nghĩ câu trả lời của tôi tốt hơn, và vì bạn không đề cập đến tại sao nó không phải là câu trả lời cho câu hỏi của bạn .. Nhưng nếu nó làm bạn cảm thấy tốt hơn, tôi biết cảm giác như thế nào .. Xem [câu hỏi này ] (http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing) cho một Q & A tôi dự định giữ tất cả cho bản thân mình. Cuối cùng tôi phải thừa nhận câu trả lời khác quả thực, tốt hơn là của chính tôi. Bạn có thể không đồng ý trong trường hợp này, không có hại gì, nhưng chỉ biết - vâng, tôi đã ở đó ..;) –

5

Mã này là khá đơn giản. Tạo một JTable bên trong một JScrollPane, bên trong một JFrame.

Tôi phải nhập một vài dòng mã để tạo mô hình bảng cho JTable. Tôi đã sắp xếp tên thuộc tính để dễ tìm hơn.

Ghi đè phương thức chuẩn bị của JTable hiển thị các mẹo công cụ cho tất cả các ô. Các ô cần hiển thị đầu công cụ là hai ô giá trị có chuỗi đường dẫn.

Tên thuộc tính hệ thống trên hệ thống của bạn có thể không giống với tên thuộc tính hệ thống trên các hệ thống khác. Windows và Unix đều có bộ tên thuộc tính hệ thống riêng.

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 cho chú giải công cụ; xem thêm [ví dụ] có liên quan này (http://stackoverflow.com/a/9134371/230513) bằng cách sử dụng 'AbstractTableModel'. – trashgod

2

Bạn có thể truy cập các thuộc tính hệ thống bằng cách sử dụng System.getProperties(). Sau đó, tất cả những gì bạn phải làm là lặp lại các phím và thao tác dữ liệu theo cách bạn muốn.

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

Bạn có thể muốn chuỗi con giá trị đó, đặc biệt là trên thuộc tính đường dẫn. –

Các vấn đề liên quan