нюансы с фильтром. отключение сортировки (что было ранее) как оказалось влияло на отрисовку всей таблицы. так что пока оставил включенным.
This commit is contained in:
@@ -20,10 +20,12 @@ public class HeaderTextFilter {
|
||||
JTextField textField = null;
|
||||
JPopupMenu popup = null;
|
||||
private String filterValue = "";
|
||||
private int offset=0;
|
||||
//при одиночном клике, показать поверх заголовка столбца выпавшее меню с полем фильтра.
|
||||
public HeaderTextFilter(DataSet dataSet_in, int columnIndex_in) {
|
||||
public HeaderTextFilter(DataSet dataSet_in, int columnIndex_in, int offset_in) {
|
||||
dataSet = dataSet_in;
|
||||
columnIndex = columnIndex_in;
|
||||
offset=offset_in;
|
||||
}
|
||||
public void Mount(DataTable control) {
|
||||
popup = new JPopupMenu() {
|
||||
@@ -42,13 +44,11 @@ public class HeaderTextFilter {
|
||||
@Override
|
||||
public void insertUpdate(DocumentEvent e) {
|
||||
setFilterValue(getText());
|
||||
// dataSet.getUI().changeHeaderFilterValue(columnIndex, getText());
|
||||
dataSet.getUI().Show();
|
||||
}
|
||||
@Override
|
||||
public void removeUpdate(DocumentEvent e) {
|
||||
setFilterValue(getText());
|
||||
// dataSet.getUI().changeHeaderFilterValue(columnIndex, getText());
|
||||
dataSet.getUI().Show();
|
||||
}
|
||||
@Override
|
||||
@@ -58,13 +58,15 @@ public class HeaderTextFilter {
|
||||
}
|
||||
};
|
||||
popup.add(textField);
|
||||
//запретить сортировать по столбцу,чтобы при нажатии на фильтр не сбивался
|
||||
/*
|
||||
Это лучше не использовать. убирание сортера по неведомым причинам урезает размер строк таблицы.
|
||||
control.setRowSorter(null);
|
||||
TableRowSorter<TableModel> sorter = new TableRowSorter<>(control.getModel());
|
||||
sorter.setSortable(columnIndex, false);
|
||||
control.setRowSorter(sorter);
|
||||
//--
|
||||
control.getColumnModel().getColumn(columnIndex).setHeaderRenderer((table, value, isSelected, hasFocus, row, column1) -> new JLabel() {
|
||||
*/
|
||||
control.getColumnModel().getColumn(columnIndex).setHeaderRenderer(
|
||||
(table, value, isSelected, hasFocus, row, column1) -> new JLabel() {
|
||||
{
|
||||
setIcon(Utils_.getIcon("/Common/icons/Filter.png"));
|
||||
setForeground(control.getTableHeader().getForeground());
|
||||
@@ -72,7 +74,6 @@ public class HeaderTextFilter {
|
||||
setFont(control.getTableHeader().getFont());
|
||||
setBorder(new MatteBorder(0, 0, 1, 1, Color.DARK_GRAY));
|
||||
setText(dataSet.getUI().getColumnInfo(columnIndex).getName() + " : " + getFilterValue());
|
||||
// setText(dataSet.getUI().getColumnInfo(columnIndex).getName() + " : " + dataSet.getUI().getHeaderFilterValue(columnIndex));
|
||||
}
|
||||
});
|
||||
//--
|
||||
@@ -83,16 +84,16 @@ public class HeaderTextFilter {
|
||||
int clickedColumnIndex = control.getTableHeader().columnAtPoint(event.getPoint());
|
||||
if (columnIndex == clickedColumnIndex) {
|
||||
Rectangle columnRectangle = control.getTableHeader().getHeaderRect(columnIndex);
|
||||
Dimension d = new Dimension(columnRectangle.width - 72, columnRectangle.height - 1);
|
||||
Dimension d = new Dimension(columnRectangle.width - offset, columnRectangle.height - 1);
|
||||
//-
|
||||
popup.setPreferredSize(d);
|
||||
popup.setMaximumSize(d);
|
||||
popup.show(control.getTableHeader(), columnRectangle.x + 72, 0);
|
||||
popup.show(control.getTableHeader(), columnRectangle.x + offset, 0);
|
||||
//-
|
||||
textField.setText(getFilterValue());
|
||||
// textField.setText(dataSet.getUI().getHeaderFilterValue(columnIndex).toString());
|
||||
textField.requestFocusInWindow();
|
||||
textField.selectAll();
|
||||
//-
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,8 +105,8 @@ public class HeaderTextFilter {
|
||||
public void setFilterValue(String filterValue_in) {
|
||||
this.filterValue = filterValue_in;
|
||||
}
|
||||
public boolean Validate(DBObject object){
|
||||
public boolean Validate(DBObject object) {
|
||||
Object field = dataSet.getUI().getFieldAt(object, columnIndex);
|
||||
return (field instanceof String)&& field.toString().contains(filterValue);
|
||||
return (field instanceof String) && field.toString().contains(filterValue);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user