آیا این خاصیت وجود داره که با کلیک بر روی ستون های jTable اون ستون سورت بشه
مثل C#
Printable View
آیا این خاصیت وجود داره که با کلیک بر روی ستون های jTable اون ستون سورت بشه
مثل C#
فکر کنم منظورتون همون Listview باشه.
کد زیر یک کلاس که می تونید به جای jtable ازش استفاده کنی
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class JListView extends JTable{
private static class SortTableModel extends AbstractTableModel{
private TableModel tableModel;
private int sortCulomn;
private boolean normalSort;
private Row[] tableRows;
private class Row implements Comparable{
public int index;
public int compareTo(Object o) {
Row second=(Row) o;
Object a=tableModel.getValueAt(index, sortCulomn);
Object b=tableModel.getValueAt(second.index, sortCulomn);
if(a instanceof Comparable){
if(a instanceof String){
String strA=((String) a).toLowerCase();
String strB=((String) b).toLowerCase();
if(normalSort)
return strA.compareTo(strB);
else
return strA.compareTo(strB)*(-1);
}
else{
if(normalSort)
return ((Comparable) a).compareTo(b);
else
return ((Comparable) a).compareTo(b)*(-1);
}
}
else
return index-second.index;
}
}
public SortTableModel(TableModel model){
tableModel=model;
tableRows=new Row[tableModel.getRowCount()];
for (int i = 0; i < tableRows.length; i++) {
tableRows[i] = new Row();
tableRows[i].index=i;
}
sortCulomn=-1;
normalSort=true;
}
private void sort(int culomn){
if(sortCulomn==culomn){
normalSort=!normalSort;
}
else{
sortCulomn=culomn;
normalSort=true;
}
Arrays.sort(tableRows);
fireTableDataChanged();
}
public int getRowCount() {
return tableModel.getRowCount();
}
public int getColumnCount() {
return tableModel.getColumnCount();
}
public Object getValueAt(int rowIndex, int columnIndex) {
return tableModel.getValueAt(tableRows[rowIndex].index, columnIndex);
}
@Override
public void setValueAt(Object value,int rowIndex, int columnIndex) {
tableModel.setValueAt(value, tableRows[rowIndex].index, columnIndex);
}
@Override
public String getColumnName(int columnIndex) {
return tableModel.getColumnName(columnIndex);
}
public void MouseAction(final JTable listView){
listView.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int selectedColumn=listView.columnAtPoint(e.getPoint() );
int modelColumn = listView.convertColumnIndexToModel(selectedColumn) ;
sort(modelColumn);
}
});
}
}
private SortTableModel model;
public JListView(Object[][] data,String[] columns) {
super();
model=new SortTableModel(new DefaultTableModel(data, columns));
this.setModel(model);
model.MouseAction(this);
}
}
سلام
من دارم از نت بینز 6.7 و بصورت ویژوال استفاده می کنم نمی دونم چطوری باید اینو به پروژه اضافه کنم اگه می تونی راهنمایم کن
تشکر
وقتی که به صورت visual یک jtable رو توی فرم می زاری در اصل یک jscrollpanel به فرمتون اضافه می شه که شامل یک jtable.
برای حل مشکلت اول jtable رو به صورت visual به فرمت اضافه کن بعداً jscrollpanel مربوط به اون رو پیدا کن (معمولاً اسم شی jscrollpane1 هست) بعد از اون به استفاده از متد setviewportview ، شی ساخته شده از jlistview رو داخل jscrollPanel قرار بده
سلام
دستتون درد نکنه
اگه براتون مقدوره یه مثال بزنید
یک نمونه برنامه می تونید قرار دهید
jtable.setAutoCreateRowSorter(true);