рефакторинг форм таблиц и заполнения информации о столбцах
This commit is contained in:
@@ -21,7 +21,7 @@ import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Vector;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -33,8 +33,8 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
|
||||
protected int current_row_i; //индекс текущей строки.
|
||||
protected boolean events_on = true;
|
||||
protected String colNamesAndSizes = "";
|
||||
protected Vector<ColumnInfo> columns = new Vector<>(); //информация о столбцах и их оформлении
|
||||
protected Vector<DBObjectFilter_<D>> allFilters = new Vector<>();
|
||||
Vector<ColumnInfo<D>> columns = new Vector<>(); //информация о столбцах и их оформлении
|
||||
MatchesCounter counter_ui = null;
|
||||
//--
|
||||
Object savedCurrentKey = null;
|
||||
@@ -43,6 +43,12 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
|
||||
public DataSetControlForm(DataSet<?, D> dataSource_in, JPanel mountPanel_in) {
|
||||
super(DataTable.class, mountPanel_in);
|
||||
dataSource = dataSource_in;
|
||||
//--
|
||||
columns.clear();
|
||||
columns.add(createPKColumn());
|
||||
if (hasCheckBox())
|
||||
columns.add(createCheckBoxColummn());
|
||||
//--
|
||||
createFilters();
|
||||
//--
|
||||
if (hasMenuBar()) {
|
||||
@@ -72,6 +78,38 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
|
||||
}
|
||||
}
|
||||
}
|
||||
protected ColumnInfo<D> createPKColumn() {
|
||||
return new ColumnInfo<D>(dataSource.getPKName()) {
|
||||
@Override
|
||||
public Object getFieldAt(D object) {
|
||||
return object.getPK();
|
||||
}
|
||||
};
|
||||
}
|
||||
protected ColumnInfo<D> createCheckBoxColummn() {
|
||||
return new ColumnInfo<D>("") {
|
||||
@Override
|
||||
public Object getFieldAt(D object) {
|
||||
return object.isSelected();
|
||||
}
|
||||
@Override
|
||||
public int getMinWidth() {
|
||||
return 25;
|
||||
}
|
||||
@Override
|
||||
public int getMaxWidth() {
|
||||
return 25;
|
||||
}
|
||||
@Override
|
||||
public Class getRendererClass() {
|
||||
return DBObjectSelectionRenderer.class;
|
||||
}
|
||||
@Override
|
||||
public Class getEditorClass() {
|
||||
return DBObjectSelector.class;
|
||||
}
|
||||
};
|
||||
}
|
||||
<M> Vector<M> getFilters(Class<M> f) {
|
||||
Vector<M> res = new Vector<>();
|
||||
for (DBObjectFilter_ filter_ : allFilters) {
|
||||
@@ -85,17 +123,13 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
|
||||
protected void AddFilter(DBObjectFilter_<D> filter_in) {
|
||||
allFilters.add(filter_in);
|
||||
}
|
||||
public ColumnInfo getColumnInfo(int i) {
|
||||
protected final void AddColumns(ColumnInfo<D>... new_columns) {
|
||||
Collections.addAll(columns, new_columns);
|
||||
}
|
||||
public ColumnInfo<D> getColumnInfo(int i) {
|
||||
return columns.get(i);
|
||||
}
|
||||
//--
|
||||
protected String[] getUIColumnNames() {
|
||||
return new String[]{};
|
||||
}
|
||||
public Object getFieldAt(D object, int columnIndex) {
|
||||
return null;
|
||||
}
|
||||
//-
|
||||
void SaveColumns() {
|
||||
if (MainModule_.instance.getDb() != null) {
|
||||
try {
|
||||
@@ -103,7 +137,6 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
|
||||
Vector<String> widths = IntStream.range(0, columns.size()).mapToObj(i -> String.valueOf(control.getColumnModel().getColumn(i).getWidth())).collect(Collectors.toCollection(Vector::new));
|
||||
String packed = String.join("|", widths);
|
||||
TableVisualData tableVisualData;
|
||||
//todo метод сохрания к бд отнести, как с окнами и проходами. (?)
|
||||
if (MainModule_.instance.getDb().tablesVisualData.containsKey(getCurrentName())) {
|
||||
tableVisualData = MainModule_.instance.getDb().tablesVisualData.get(getCurrentName());
|
||||
} else {
|
||||
@@ -121,20 +154,6 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
|
||||
Vector<String> getHeaders() {
|
||||
return columns.stream().map(ColumnInfo::getName).collect(Collectors.toCollection(Vector::new));
|
||||
}
|
||||
void CreateColumnsInfo() {
|
||||
columns.clear();
|
||||
columns.add(new ColumnInfo(dataSource.getPKName()));
|
||||
if (hasCheckBox()) {
|
||||
columns.add(new ColumnInfo("", DBObjectSelectionRenderer.class, DBObjectSelector.class));
|
||||
columns.get(1).setMinWidth(25);
|
||||
columns.get(1).setMaxWidth(25);
|
||||
}
|
||||
Arrays.stream(getUIColumnNames()).forEach(name -> columns.add(new ColumnInfo(name)));
|
||||
AdditionalInitColumns();
|
||||
}
|
||||
protected void AdditionalInitColumns() {
|
||||
//уточнение инфы по столбцам.
|
||||
}
|
||||
protected Comparator<D> getDefaultComparator() {
|
||||
return null;
|
||||
}
|
||||
@@ -160,18 +179,13 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
|
||||
}
|
||||
@Override
|
||||
protected void createControl() {
|
||||
CreateColumnsInfo();
|
||||
GridAnchestor table_data_model = new GridAnchestor(getHeaders(), getVisibleKeys()) {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Object getValueAt(int rowIndex, int columnIndex) {
|
||||
Object key = data.get(rowIndex);
|
||||
if (columnIndex == 0)
|
||||
return key;
|
||||
D object = dataSource.get((key));
|
||||
if ((columnIndex == 1) && hasCheckBox())
|
||||
return object.isSelected();
|
||||
return getFieldAt(object, columnIndex);
|
||||
return columns.get(columnIndex).getFieldAt(object);
|
||||
}
|
||||
@Override
|
||||
public boolean isCellEditable(int row, int col) {
|
||||
|
||||
@@ -1,26 +1,13 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.CommonConstants;
|
||||
public class ColumnInfo {
|
||||
public abstract class ColumnInfo<D> {
|
||||
private String Name = "?";
|
||||
private boolean visible = true;
|
||||
private boolean editable = false;
|
||||
private Class rendererClass = null;
|
||||
private Class editorClass = null;
|
||||
private int maxWidth = CommonConstants.Nan;
|
||||
private int minWidth = CommonConstants.Nan;
|
||||
public ColumnInfo(String name_in) {
|
||||
setName(name_in);
|
||||
}
|
||||
public ColumnInfo(String name_in, Class renderer_in, Class editor_in) {
|
||||
setName(name_in);
|
||||
setRendererClass(renderer_in);
|
||||
setEditable(true);
|
||||
setEditorClass(editor_in);
|
||||
}
|
||||
public ColumnInfo(String name_in, Class renderer_in) {
|
||||
setName(name_in);
|
||||
setRendererClass(renderer_in);
|
||||
}
|
||||
public abstract Object getFieldAt(D object);
|
||||
public String getName() {
|
||||
return Name;
|
||||
}
|
||||
@@ -34,23 +21,13 @@ public class ColumnInfo {
|
||||
this.visible = visible_in;
|
||||
}
|
||||
public boolean isEditable() {
|
||||
return editable;
|
||||
}
|
||||
public void setEditable(boolean editable_in) {
|
||||
this.editable = editable_in;
|
||||
return getEditorClass() != null;
|
||||
}
|
||||
public Class getRendererClass() {
|
||||
return rendererClass;
|
||||
}
|
||||
public void setRendererClass(Class renderer_in) {
|
||||
this.rendererClass = renderer_in;
|
||||
return null;
|
||||
}
|
||||
public Class getEditorClass() {
|
||||
return editorClass;
|
||||
}
|
||||
public void setEditorClass(Class editor_in) {
|
||||
this.editorClass = editor_in;
|
||||
setEditable(editorClass != null);
|
||||
return null;
|
||||
}
|
||||
public boolean hasRenderer() {
|
||||
return getRendererClass() != null;
|
||||
@@ -59,22 +36,16 @@ public class ColumnInfo {
|
||||
return getEditorClass() != null;
|
||||
}
|
||||
public int getMaxWidth() {
|
||||
return maxWidth;
|
||||
}
|
||||
public void setMaxWidth(int maxWidth_in) {
|
||||
this.maxWidth = maxWidth_in;
|
||||
return CommonConstants.Nan;
|
||||
}
|
||||
public boolean hasMaxWidth() {
|
||||
return maxWidth != CommonConstants.Nan;
|
||||
return getMaxWidth() != CommonConstants.Nan;
|
||||
}
|
||||
//-
|
||||
public int getMinWidth() {
|
||||
return minWidth;
|
||||
}
|
||||
public void setMinWidth(int minWidth_in) {
|
||||
this.minWidth = minWidth_in;
|
||||
return CommonConstants.Nan;
|
||||
}
|
||||
public boolean hasMinWidth() {
|
||||
return minWidth != CommonConstants.Nan;
|
||||
return getMinWidth() != CommonConstants.Nan;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public class HeaderTextFilter<D extends DBObject> implements DBObjectFilter_<D>
|
||||
}
|
||||
@Override
|
||||
public boolean Validate(D object) {
|
||||
Object field = dataSet.getUI().getFieldAt(object, columnIndex);
|
||||
Object field = dataSet.getUI().getColumnInfo(columnIndex).getFieldAt(object);
|
||||
return (field instanceof String) && field.toString().toLowerCase().contains(filterValue);
|
||||
}
|
||||
//---
|
||||
|
||||
@@ -6,9 +6,9 @@ import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
public class RendereEditableHeader implements TableCellRenderer {
|
||||
private final JComponent editor;
|
||||
private JTable table = null;
|
||||
private MouseEventReposter reporter = null;
|
||||
private JComponent editor;
|
||||
public RendereEditableHeader(JComponent editor) {
|
||||
this.editor = editor;
|
||||
this.editor.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
|
||||
@@ -30,10 +30,10 @@ public class RendereEditableHeader implements TableCellRenderer {
|
||||
return this.editor;
|
||||
}
|
||||
static public class MouseEventReposter extends MouseAdapter {
|
||||
private final JTableHeader header;
|
||||
private final Component editor;
|
||||
private Component dispatchComponent;
|
||||
private JTableHeader header;
|
||||
private int column = -1;
|
||||
private Component editor;
|
||||
public MouseEventReposter(JTableHeader header, int column, Component editor) {
|
||||
this.header = header;
|
||||
this.column = column;
|
||||
|
||||
Reference in New Issue
Block a user