рефакторинг фильтра по заголовку столбца. начало.
This commit is contained in:
@@ -1,36 +1,55 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.CommonConstants;
|
||||
import Common.Database.Database;
|
||||
import Common.Database.Tables.DataSet;
|
||||
import Common.Utils.Utils_;
|
||||
import Common.Visual.DataSetControlForm;
|
||||
import Common.Visual.TextField.StyledTextField;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.MatteBorder;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
import javax.swing.table.TableModel;
|
||||
import javax.swing.table.TableRowSorter;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
public class HeaderTextFilter {
|
||||
public JTextField textField;
|
||||
public JPopupMenu popup;
|
||||
public HeaderTextFilter(DataSet dataSet, int columnIndex) {
|
||||
DataSet dataSet= null; //таблица к интерфейсу которой относится фильтр.
|
||||
String value= "";
|
||||
int columnIndex = CommonConstants.Nan; //номер столбца к которому привязан фильтр.
|
||||
JTextField textField = null;
|
||||
JPopupMenu popup = null;
|
||||
//при одиночном клике, показать поверх заголовка столбца выпавшее меню с полем фильтра.
|
||||
public HeaderTextFilter(DataSet dataSet_in, int columnIndex_in) {
|
||||
dataSet = dataSet_in;
|
||||
columnIndex = columnIndex_in;
|
||||
}
|
||||
public void Mount(DataTable control) {
|
||||
popup = new JPopupMenu() {
|
||||
{
|
||||
setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
|
||||
}
|
||||
};
|
||||
textField = new StyledTextField() {
|
||||
{
|
||||
setBorder(null);
|
||||
addActionListener(e -> {
|
||||
popup.setVisible(false);
|
||||
dataSet.getUI().getControl().getTableHeader().repaint();
|
||||
control.getTableHeader().repaint();
|
||||
});
|
||||
getDocument().addDocumentListener(new DocumentListener() {
|
||||
@Override
|
||||
public void insertUpdate(DocumentEvent e) {
|
||||
// value = getText();
|
||||
dataSet.getUI().changeHeaderFilterValue(columnIndex, getText());
|
||||
dataSet.ShowUI();
|
||||
dataSet.getUI().Show();
|
||||
}
|
||||
@Override
|
||||
public void removeUpdate(DocumentEvent e) {
|
||||
dataSet.getUI().changeHeaderFilterValue(columnIndex, getText());
|
||||
dataSet.ShowUI();
|
||||
dataSet.getUI().Show();
|
||||
}
|
||||
@Override
|
||||
public void changedUpdate(DocumentEvent e) {
|
||||
@@ -38,35 +57,37 @@ public class HeaderTextFilter {
|
||||
});
|
||||
}
|
||||
};
|
||||
popup = new JPopupMenu() {
|
||||
{
|
||||
setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
|
||||
}
|
||||
};
|
||||
popup.add(textField);
|
||||
//запретить сортировать по столбцу,чтобы при нажатии на фильтр не сбивался
|
||||
control.setRowSorter(null);
|
||||
TableRowSorter<TableModel> sorter = new TableRowSorter<>(control.getModel());
|
||||
sorter.setSortable(columnIndex, false);
|
||||
control.setRowSorter(sorter);
|
||||
//--
|
||||
dataSet.getUI().getControl().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(dataSet.getUI().getControl().getTableHeader().getForeground());
|
||||
setBackground(dataSet.getUI().getControl().getTableHeader().getBackground());
|
||||
setFont(dataSet.getUI().getControl().getTableHeader().getFont());
|
||||
setForeground(control.getTableHeader().getForeground());
|
||||
setBackground(control.getTableHeader().getBackground());
|
||||
setFont(control.getTableHeader().getFont());
|
||||
setBorder(new MatteBorder(0, 0, 1, 1, Color.DARK_GRAY));
|
||||
setText("текст : " + dataSet.getUI().getHeaderFilterValue(columnIndex));
|
||||
setText(dataSet.getUI().getColumnInfo(columnIndex).getName() + " : " + dataSet.getUI().getHeaderFilterValue(columnIndex));
|
||||
}
|
||||
});
|
||||
//--
|
||||
dataSet.getUI().getControl().getTableHeader().addMouseListener(new MouseAdapter() {
|
||||
control.getTableHeader().addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent event) {
|
||||
if (event.getClickCount() == 1) {
|
||||
int columnIndex = dataSet.getUI().getControl().getTableHeader().columnAtPoint(event.getPoint());
|
||||
if (dataSet.getUI().headersTextFilters.containsKey(columnIndex)) {
|
||||
Rectangle columnRectangle = dataSet.getUI().getControl().getTableHeader().getHeaderRect(columnIndex);
|
||||
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);
|
||||
//-
|
||||
popup.setPreferredSize(d);
|
||||
popup.setMaximumSize(d);
|
||||
popup.show(dataSet.getUI().getControl().getTableHeader(), columnRectangle.x + 72, 0);
|
||||
popup.show(control.getTableHeader(), columnRectangle.x + 72, 0);
|
||||
//-
|
||||
textField.setText(dataSet.getUI().getHeaderFilterValue(columnIndex).toString());
|
||||
textField.requestFocusInWindow();
|
||||
textField.selectAll();
|
||||
|
||||
Reference in New Issue
Block a user