Re: Make a simple 4 row by 4 column scratch pad.
On Feb 25, 9:59 pm, "John B. Matthews" <nos...@nospam.invalid> wrote:
In article
<eb326c81-48d8-4e2c-9420-20b92402c...@d27g2000yqf.googlegroups.com>,
bH <bherbs...@hotmail.com> wrote:
I looked at Lew's comment again and went to the JTable tutorial. I
think that this might do it for the features explained how to edit
while main program is running. ... But I was hoping for something
simple than what is in the link above.
Yes, I think you need at least a renderer and editor to make it usable:
<http://java.sun.com/docs/books/tutorial/uiswing/components/table.html>
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.text.DecimalFormat;
import java.util.Arrays;
import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
public class TableGrid extends JPanel {
private DecimalFormat df = new DecimalFormat("#0.00");
private JTextField tf = new JTextField();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("TableGrid");
f.setDefaultCloseOperation(JFrame.DISPOSE=
_ON_CLOSE);
f.add(new TableGrid());
f.pack();
f.setVisible(true);
}
});
}
public TableGrid() {
TableModel dataModel = new TableModel();
JTable table = new JTable(dataModel);
table.setCellSelectionEnabled(true);
table.setRowHeight(32);
table.setDefaultRenderer(Double.class, new DecRenderer(df=
));
table.setDefaultEditor(Double.class, new DecEditor(tf, df=
));
this.add(table);
}
private static class TableModel extends AbstractTableModel {
private static final int SIZE = 4;
private Double[][] matrix = new Double[SIZE][SIZE];
public TableModel() {
for (Object[] row : matrix) {
Arrays.fill(row, Double.valueOf(0));
}
}
@Override
public int getRowCount() {
return SIZE;
}
@Override
public int getColumnCount() {
return SIZE;
}
@Override
public Object getValueAt(int row, int col) {
return matrix[row][col];
}
@Override
public void setValueAt(Object value, int row, int col) {
matrix[row][col] = (Double) value;
}
@Override
public Class<?> getColumnClass(int col) {
return Double.class;
}
@Override
public boolean isCellEditable(int row, int col) {
return true;
}
}
private static class DecRenderer extends DefaultTableCellRenderer=
{
DecimalFormat df;
public DecRenderer(DecimalFormat df) {
this.df = df;
this.setHorizontalAlignment(JLabel.CENTER);
this.setBackground(Color.lightGray);
}
@Override
protected void setValue(Object value) {
setText((value == null) ? "" : df.format(valu=
e));
}
}
private static class DecEditor extends DefaultCellEditor {
private JTextField tf;
private DecimalFormat df;
public DecEditor(JTextField tf, DecimalFormat df) {
super(tf);
this.tf = tf;
this.df = df;
tf.setHorizontalAlignment(JTextField.CENTER);
}
@Override
public Object getCellEditorValue() {
try {
return new Double(tf.getText());
} catch (NumberFormatException e) {
return Double.valueOf(0);
}
}
@Override
public Component getTableCellEditorComponent(JTable table=
,
Object value, boolean isSelected, int row, int co=
lumn) {
tf.setText((value == null) ? "" : df.format((=
Double) value));
if (isSelected) tf.selectAll();
return tf;
}
}
}
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
Hi John,
A really big thank you for your demo.
I am impressed by the coloring
on the cell chosen and the grid's 4 by 4 appearance.
With a very few modifications this scratch pad
is complete.
Making comment about my earlier questions
and answers that you helped me with, that is,
making sub images out of a larger image.
<http://groups.google.com/group/comp.lang.java.help/browse_thread/
thread/3eb3b7a6599b23ab# >
I have removed the control of the fixed grid.
<http://groups.google.com/group/comp.lang.java.help/browse_thread/
thread/76f86e4cfb54f6c6#>
I now move separate but shuffled sub images to
recombine into the original image.
It is highly graphical specific. Image movement is
not with a mouse but controls using
input from a JTextField(s) and a click on a custom drawing.
Your scratch pad helps me to keep track of
what numbered image to move when getting
to a stage of final alignment. There are 16
sub images.
Thanks again. I truly appreciate it.
bH