forked from LupusNobilis/java-org.hwo.ui
WIP161117
parent
82124f8e9e
commit
f0ef6ddd39
|
@ -13,6 +13,8 @@ public @interface TableColumn {
|
||||||
String after() default "";
|
String after() default "";
|
||||||
boolean firstColumn() default false;
|
boolean firstColumn() default false;
|
||||||
int order() default 0;
|
int order() default 0;
|
||||||
|
String format() default "";
|
||||||
|
int fieldlength() default 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.hwo.models.TableMapper;
|
package org.hwo.models.TableMapper;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
import java.awt.MouseInfo;
|
import java.awt.MouseInfo;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
|
@ -58,6 +59,8 @@ public class TableMapper extends AbstractTableModel
|
||||||
private ColumnInfo nextColumn;
|
private ColumnInfo nextColumn;
|
||||||
|
|
||||||
private int order;
|
private int order;
|
||||||
|
private Integer
|
||||||
|
extractField;
|
||||||
|
|
||||||
protected ColumnInfo(TableColumn tc,Field field)
|
protected ColumnInfo(TableColumn tc,Field field)
|
||||||
{
|
{
|
||||||
|
@ -170,7 +173,14 @@ public class TableMapper extends AbstractTableModel
|
||||||
public int getOrder() {
|
public int getOrder() {
|
||||||
return order;
|
return order;
|
||||||
}
|
}
|
||||||
|
public void setOrder(int order) {
|
||||||
|
this.order = order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getColumnLabel(){
|
||||||
|
return String.format(this.p_label, extractField);
|
||||||
|
}
|
||||||
|
|
||||||
public String getLabel()
|
public String getLabel()
|
||||||
{
|
{
|
||||||
return this.p_label;
|
return this.p_label;
|
||||||
|
@ -198,27 +208,59 @@ public class TableMapper extends AbstractTableModel
|
||||||
return this.p_columnclass;
|
return this.p_columnclass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getValue(Object instance) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
|
private Object fetchValue(Object instance) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
|
||||||
{
|
{
|
||||||
|
Object v = null;
|
||||||
if (p_field != null)
|
if (p_field != null)
|
||||||
return p_field.get(instance);
|
v = p_field.get(instance);
|
||||||
if (p_method != null)
|
if (p_method != null)
|
||||||
return p_method.invoke(instance, null);
|
v = p_method.invoke(instance);
|
||||||
return null;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setValue(Object instance,Object value) throws IllegalAccessException
|
public Object getValue(Object instance) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
|
||||||
{
|
{
|
||||||
if (p_field != null)
|
Object v = fetchValue(instance);
|
||||||
p_field.set(instance, value);
|
|
||||||
|
|
||||||
if (p_method_w != null){
|
if (v.getClass().isArray() && (extractField != null)){
|
||||||
try {
|
v = ((Object[])v)[extractField];
|
||||||
p_method_w.invoke(instance, value);
|
}
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
e.printStackTrace();
|
if (!p_annotation.format().equals("")){
|
||||||
} catch (InvocationTargetException e) {
|
v = String.format(p_annotation.format(), v);
|
||||||
e.printStackTrace();
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Object instance,Object value) throws IllegalAccessException,InvocationTargetException
|
||||||
|
{
|
||||||
|
if (extractField != null){
|
||||||
|
Object v = fetchValue(instance);
|
||||||
|
((Object[])v)[extractField] = value;
|
||||||
|
|
||||||
|
if (p_method_w != null){
|
||||||
|
try {
|
||||||
|
p_method_w.invoke(instance, v);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (p_field != null)
|
||||||
|
p_field.set(instance, value);
|
||||||
|
|
||||||
|
if (p_method_w != null){
|
||||||
|
try {
|
||||||
|
p_method_w.invoke(instance, value);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -247,6 +289,13 @@ public class TableMapper extends AbstractTableModel
|
||||||
this.tableColumn = tableColumn;
|
this.tableColumn = tableColumn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getExtractField() {
|
||||||
|
return extractField;
|
||||||
|
}
|
||||||
|
public void setExtractField(Integer extractField) {
|
||||||
|
this.extractField = extractField;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -373,7 +422,16 @@ public class TableMapper extends AbstractTableModel
|
||||||
} else {
|
} else {
|
||||||
this.jTable.setRowSorter(null);
|
this.jTable.setRowSorter(null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int minwidth = 0;
|
||||||
|
for (ColumnInfo ci: p_columns){
|
||||||
|
minwidth += ci.getWidth();
|
||||||
|
}
|
||||||
|
|
||||||
|
//jTable.setMinSize(new Dimension(minwidth, 24));
|
||||||
|
jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSortingEnabled() {
|
public boolean isSortingEnabled() {
|
||||||
|
@ -443,7 +501,7 @@ public class TableMapper extends AbstractTableModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openEditor()
|
public void openEditor()
|
||||||
{
|
{
|
||||||
System.err.println("TableMapper.openEditor()");
|
System.err.println("TableMapper.openEditor()");
|
||||||
for (TableMapperListener listener: this.tableMapperListeners){
|
for (TableMapperListener listener: this.tableMapperListeners){
|
||||||
|
@ -495,7 +553,8 @@ public class TableMapper extends AbstractTableModel
|
||||||
|
|
||||||
public void setRows(Object[] rows)
|
public void setRows(Object[] rows)
|
||||||
{
|
{
|
||||||
this.p_rows = Arrays.asList(rows);
|
this.p_rows = new ArrayList<>();
|
||||||
|
this.p_rows.addAll(Arrays.asList(rows));
|
||||||
fireTableDataChanged();
|
fireTableDataChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,8 +619,19 @@ public class TableMapper extends AbstractTableModel
|
||||||
{
|
{
|
||||||
if (field.getAnnotation(TableColumn.class)!=null)
|
if (field.getAnnotation(TableColumn.class)!=null)
|
||||||
{
|
{
|
||||||
ColumnInfo ci = new ColumnInfo(field.getAnnotation(TableColumn.class),field);
|
int fl = field.getAnnotation(TableColumn.class).fieldlength();
|
||||||
addColumnInfo(ci);
|
if (fl > 0){
|
||||||
|
for (int i=0;i<fl;i++){
|
||||||
|
ColumnInfo ci = new ColumnInfo(field.getAnnotation(TableColumn.class),field);
|
||||||
|
ci.setExtractField(i);
|
||||||
|
ci.setOrder(ci.getOrder() + i);
|
||||||
|
addColumnInfo(ci);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ColumnInfo ci = new ColumnInfo(field.getAnnotation(TableColumn.class),field);
|
||||||
|
addColumnInfo(ci);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,8 +639,19 @@ public class TableMapper extends AbstractTableModel
|
||||||
{
|
{
|
||||||
if (method.getAnnotation(TableColumn.class)!=null)
|
if (method.getAnnotation(TableColumn.class)!=null)
|
||||||
{
|
{
|
||||||
ColumnInfo ci = new ColumnInfo(method.getAnnotation(TableColumn.class),method);
|
int fl = method.getAnnotation(TableColumn.class).fieldlength();
|
||||||
addColumnInfo(ci);
|
if (fl > 0){
|
||||||
|
for (int i=0;i<fl;i++){
|
||||||
|
ColumnInfo ci = new ColumnInfo(method.getAnnotation(TableColumn.class),method);
|
||||||
|
ci.setExtractField(i);
|
||||||
|
ci.setOrder(ci.getOrder() + i);
|
||||||
|
addColumnInfo(ci);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ColumnInfo ci = new ColumnInfo(method.getAnnotation(TableColumn.class),method);
|
||||||
|
addColumnInfo(ci);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,11 +722,30 @@ public class TableMapper extends AbstractTableModel
|
||||||
return this.p_readonly;
|
return this.p_readonly;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addRow(Object row,Object before){
|
||||||
|
if (before != null){
|
||||||
|
int ind = this.p_rows.indexOf(before);
|
||||||
|
this.p_rows.add(ind, row);
|
||||||
|
fireTableRowsInserted(ind, ind);
|
||||||
|
} else {
|
||||||
|
this.p_rows.add(row);
|
||||||
|
fireTableRowsInserted(this.p_rows.indexOf(row),this.p_rows.indexOf(row));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addRows(Object[] rows,Object before){
|
||||||
|
int ind = (before != null) ? this.p_rows.indexOf(before) : p_rows.size();
|
||||||
|
int n = ind;
|
||||||
|
|
||||||
|
for (Object row: rows){
|
||||||
|
this.p_rows.add(n++, row);
|
||||||
|
}
|
||||||
|
fireTableDataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
public void addRow(Object row)
|
public void addRow(Object row)
|
||||||
{
|
{
|
||||||
this.p_rows.add(row);
|
addRow(row,null);
|
||||||
//fireTableRowsInserted(getRowCount()-1, getRowCount()-1);
|
|
||||||
fireTableDataChanged();
|
|
||||||
}
|
}
|
||||||
public void removeRow(Object row)
|
public void removeRow(Object row)
|
||||||
{
|
{
|
||||||
|
@ -720,6 +820,10 @@ public class TableMapper extends AbstractTableModel
|
||||||
this.p_columns.get(columnIndex).setValue(this.p_rows.get(rowIndex), aValue);
|
this.p_columns.get(columnIndex).setValue(this.p_rows.get(rowIndex), aValue);
|
||||||
fireValueChanged(rowIndex, columnIndex);
|
fireValueChanged(rowIndex, columnIndex);
|
||||||
} catch (IllegalAccessException ex)
|
} catch (IllegalAccessException ex)
|
||||||
|
{
|
||||||
|
System.err.println("IllegalAccessException: " + ex);
|
||||||
|
ex.printStackTrace();
|
||||||
|
} catch (InvocationTargetException ex)
|
||||||
{
|
{
|
||||||
System.err.println("IllegalAccessException: " + ex);
|
System.err.println("IllegalAccessException: " + ex);
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
|
@ -783,7 +887,6 @@ public class TableMapper extends AbstractTableModel
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean exportToFile(File exportFile)
|
public boolean exportToFile(File exportFile)
|
||||||
{
|
{
|
||||||
CSV csv = new CSV();
|
CSV csv = new CSV();
|
||||||
|
|
|
@ -40,7 +40,7 @@ class TableMapperColumnModel implements TableColumnModel{
|
||||||
TableColumn tc = new TableColumn(i, ci.getWidth());
|
TableColumn tc = new TableColumn(i, ci.getWidth());
|
||||||
tc.setPreferredWidth(ci.getWidth());
|
tc.setPreferredWidth(ci.getWidth());
|
||||||
tc.setMinWidth(ci.getWidth());
|
tc.setMinWidth(ci.getWidth());
|
||||||
tc.setHeaderValue(ci.getLabel());
|
tc.setHeaderValue(ci.getColumnLabel());
|
||||||
tc.addPropertyChangeListener(new PropertyChangeListener() {
|
tc.addPropertyChangeListener(new PropertyChangeListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package org.hwo.ui;
|
package org.hwo.ui;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.Component;
|
||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
|
|
||||||
import javax.swing.DefaultListModel;
|
import javax.swing.DefaultListModel;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
|
@ -23,12 +25,30 @@ import java.awt.event.ActionEvent;
|
||||||
import java.awt.Dialog.ModalExclusionType;
|
import java.awt.Dialog.ModalExclusionType;
|
||||||
import java.awt.Dialog.ModalityType;
|
import java.awt.Dialog.ModalityType;
|
||||||
|
|
||||||
public class JObjectSelector extends JDialog {
|
public class JObjectSelector<E> extends JDialog {
|
||||||
|
|
||||||
public static Object execute(Object[] items){
|
public static <T> T execute(T[] items){
|
||||||
|
return execute(items,null,null);
|
||||||
JObjectSelector os = new JObjectSelector();
|
}
|
||||||
|
public static <T> T execute(T[] items,Component parent){
|
||||||
|
return execute(items,parent,null,null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends Object> T execute(T[] items,String title,String text){
|
||||||
|
return execute(items,null,title,text);
|
||||||
|
}
|
||||||
|
public static <T extends Object> T execute(T[] items,Component parent,String title,String text){
|
||||||
|
JObjectSelector<T> os = new JObjectSelector<T>();
|
||||||
os.setItems(items);
|
os.setItems(items);
|
||||||
|
if (title != null)
|
||||||
|
os.setTitle(title);
|
||||||
|
if (text != null)
|
||||||
|
os.setText(text);
|
||||||
|
|
||||||
|
if (parent != null){
|
||||||
|
os.setLocationRelativeTo(parent);
|
||||||
|
}
|
||||||
|
|
||||||
os.setVisible(true);
|
os.setVisible(true);
|
||||||
os.dispose();
|
os.dispose();
|
||||||
return os.selectedItem;
|
return os.selectedItem;
|
||||||
|
@ -38,8 +58,8 @@ public class JObjectSelector extends JDialog {
|
||||||
private final JPanel contentPanel = new JPanel();
|
private final JPanel contentPanel = new JPanel();
|
||||||
private JList lItems;
|
private JList lItems;
|
||||||
|
|
||||||
private Object[] items;
|
private E[] items;
|
||||||
private Object selectedItem;
|
private E selectedItem;
|
||||||
private JLabel lText;
|
private JLabel lText;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -105,7 +125,7 @@ public class JObjectSelector extends JDialog {
|
||||||
|
|
||||||
public void accept()
|
public void accept()
|
||||||
{
|
{
|
||||||
selectedItem = lItems.getSelectedValue();
|
selectedItem = (E)lItems.getSelectedValue();
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,15 +133,15 @@ public class JObjectSelector extends JDialog {
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setItems(Object[] items) {
|
public void setItems(E[] items) {
|
||||||
this.items = items;
|
this.items = items;
|
||||||
DefaultListModel dlm = new DefaultListModel();
|
DefaultListModel dlm = new DefaultListModel();
|
||||||
for (Object o:items){
|
for (E o:items){
|
||||||
dlm.addElement(o);
|
dlm.addElement(o);
|
||||||
}
|
}
|
||||||
lItems.setModel(dlm);
|
lItems.setModel(dlm);
|
||||||
}
|
}
|
||||||
public Object[] getItems() {
|
public E[] getItems() {
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,8 @@ public class LinePlotPainter implements PlotPainter {
|
||||||
|
|
||||||
Stroke stroke;
|
Stroke stroke;
|
||||||
|
|
||||||
|
Color color;
|
||||||
|
|
||||||
public LinePlotPainter() {
|
public LinePlotPainter() {
|
||||||
setWidth(1.0f);
|
setWidth(1.0f);
|
||||||
}
|
}
|
||||||
|
@ -25,7 +27,7 @@ public class LinePlotPainter implements PlotPainter {
|
||||||
@Override
|
@Override
|
||||||
public void paintPoint(Graphics2D g, Color color, int x, int y) {
|
public void paintPoint(Graphics2D g, Color color, int x, int y) {
|
||||||
if (lx != -1){
|
if (lx != -1){
|
||||||
g.setColor(color);
|
g.setColor(this.color != null ? this.color : color);
|
||||||
Stroke s = g.getStroke();
|
Stroke s = g.getStroke();
|
||||||
g.setStroke(stroke);
|
g.setStroke(stroke);
|
||||||
g.drawLine(lx, ly, x, y);
|
g.drawLine(lx, ly, x, y);
|
||||||
|
@ -44,4 +46,11 @@ public class LinePlotPainter implements PlotPainter {
|
||||||
return width;
|
return width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Color getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
public void setColor(Color color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,8 @@ public class SimplePlotLabeler implements PlotLabeler {
|
||||||
String.format("%%.%df",-digits),
|
String.format("%%.%df",-digits),
|
||||||
value
|
value
|
||||||
);
|
);
|
||||||
|
} else if (digits == 0){
|
||||||
|
return String.format("%1.2f",value);
|
||||||
} else {
|
} else {
|
||||||
return String.format(
|
return String.format(
|
||||||
String.format("%%%d.2f",-digits),
|
String.format("%%%d.2f",-digits),
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.hwo.ui.dialog;
|
package org.hwo.ui.dialog;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.Component;
|
||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
|
@ -32,10 +33,13 @@ public class SerialPortChooser extends JDialog {
|
||||||
{
|
{
|
||||||
return execute(null);
|
return execute(null);
|
||||||
}
|
}
|
||||||
public static NewSerialPort execute(String selectedPortName)
|
public static NewSerialPort execute(Component parent,String selectedPortName)
|
||||||
{
|
{
|
||||||
SerialPortChooser spc = new SerialPortChooser();
|
SerialPortChooser spc = new SerialPortChooser();
|
||||||
|
|
||||||
|
if (parent != null)
|
||||||
|
spc.setLocationRelativeTo(parent);
|
||||||
|
|
||||||
if (selectedPortName != null)
|
if (selectedPortName != null)
|
||||||
spc.setSelectedSerialPort(selectedPortName);
|
spc.setSelectedSerialPort(selectedPortName);
|
||||||
|
|
||||||
|
@ -43,6 +47,10 @@ public class SerialPortChooser extends JDialog {
|
||||||
|
|
||||||
return spc.getSelectedSerialPort();
|
return spc.getSelectedSerialPort();
|
||||||
}
|
}
|
||||||
|
public static NewSerialPort execute(String selectedPortName)
|
||||||
|
{
|
||||||
|
return execute(null,selectedPortName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private final JPanel contentPanel = new JPanel();
|
private final JPanel contentPanel = new JPanel();
|
||||||
|
|
Loading…
Reference in New Issue