تا الان به جرات می توان گفت جاوا 6 نسبت به نگارش های پیشین بیش از هر چیز دیگر به امکانات Desktop پرداخته است و ویژگیهایی از قبیل System Tray ،کلاس Desktop و پشتیبانی بیشتر کلاس ها از modality در dialog ها document ها و... کلاس SwingWorker برای کار ترکیبی swing با Thread ها و بسیاری از قابلیت های دیگر، اکنون دارای پشتیبانی خوبی در تمامی سیستم عامل هایی که ماشین مجازی جاوای 6 در آنها نصب شده، می باشند. در مثال زیر متد JTable.setRowSorter() به همراه کلاس
javax.swing.table.TableRowSorter برای مرتب سازی اطلاعات سیستم کاربر در یک جدول به کار رفته اند. با هر کلیک بر روی عنوان هر ستون بر اساس مقادیر رشته ای آن ستون داده های جدول مرتب می شوند.
البته این مثال نحوه استفاده از TableRowSorter را برای ایجاد یک روش مرتب سازی رشته ای را معرفی می کند (برای مرتب سازی صحیح فارسی با کمک یک الگوریتم، رشته ای مناسب را ایجاد و در StringConverter برگردانید.) در صورتی که داده های جدول شما از نوع String های انگلیسی است یا شیئی است که نمایش String آن برای مرتب سازی مناسب است، می توانید صرف نظر از همه جزئیات دستورات زیر را برای مرتب سازی خودکار بکار برید:
JTable table = new JTable(data, titles);
table.setAutoCreateRowSorter(true);
به JTable قابلیت های دیگری نیز از قبیل filtering (که در مثال برای کلماتی که "java" ندارند فیلتر گذاشته شده است) و highlighting اضافه شده که توضیحات آن در http://download.java.net/jdk6/docs/a...ng/JTable.html آمده است.
امکانات جدید Desktop به طور کامل در این آدرس معرفی شده اند:
Update: Desktop Java Features in Mustang
(http://java.sun.com/developer/techni...sktop/mustang/)
همچنین در آدرس های اطلاعات بیشتری را در این زمینه خواهید یافت:
http://community.java.net/javadesktop/
http://javadesktop.org/forums/
مقاله java.sun.com در مورد نحوه به کارگرفتن کلاس Desktop به همراه مثال را در این آدرس بخوانید:
Using the Desktop API in Java SE 6 (Mustang)
http://java.sun.com/developer/techni...g/desktop_api/
_________________________________
/*
* An example to demonstrate sorting data of javax.swing.JTable.
*
*/
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class SystemInfoFrame extends JFrame {
public static final long serialVersionUID = 0xf7ae5e71a1l;
public static void main(String[] args) throws Exception {
new SystemInfoFrame();
}
public SystemInfoFrame() {
super("System Properties");
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
setSize( ( int ) ( scrSize.width/1.2 ), ( int ) ( scrSize.height / 1.2 ));
setLocation(scrSize.width / 2 - getSize().width / 2,
scrSize.height / 2 - getSize().height / 2);
add(new JScrollPane(new SystemPropertiesTable()));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}
class SystemPropertiesTable extends JTable {
public static final long serialVersionUID = 0x5e71a1;
public SystemPropertiesTable() {
SystemPropertiesTableModel dataModel = new SystemPropertiesTableModel();
setModel(dataModel);
MyTableRowSorter<SystemPropertiesTableModel> sorter =
new MyTableRowSorter<SystemPropertiesTableModel>(dataM odel);
setRowSorter(sorter);
try {
sorter.setRowFilter(RowFilter.regexFilter("java")) ;
} catch (java.util.regex.PatternSyntaxException pse) {
pse.printStackTrace();
}
}
}
class MyTableRowSorter<MyTableModel extends SystemPropertiesTableModel>
extends TableRowSorter<MyTableModel> {
private TableStringConverter tsc;
public MyTableRowSorter(MyTableModel model) {
super(model);
}
public TableStringConverter getStringConverter() {
if (tsc == null) {
tsc = new TableStringConverter() {
public String toString(TableModel model, int row, int
column) {
return (String)model.getValueAt(row, column); //
String representation for my objects
}
};
}
return tsc;
}
}
class SystemPropertiesTableModel extends AbstractTableModel {
public static final long serialVersionUID = 0x5e71a10de1l;
private String[][] data;
private String[] colNames = new String[] {"Key", "Value"};
public SystemPropertiesTableModel() {
Object[] keys = (java.util.Collections.list(
System.getProperties().propertyNames()
).toArray());
//java.util.Arrays.sort(keys); // Also you may sort them at first...
data = new String[keys.length][2];
for(int i = 0; i < keys.length; i++) {
data[i][0] = (String)keys[i];
data[i][1] = System.getProperty(data[i][0]);
}
}
public int getColumnCount() {
return 2;
}
public String getColumnName(int column) {
return colNames[column];
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
}