Thursday August 03, 2006 Ein einfaches Beispiel für eine mit dem GWT erstellte Matrixeingabeform. Bei einem vergrößern oder verkleinern der Matrix wird immer die Methode createMatrix() aufgerufen. Diese Methode könnte man wahrscheinlich noch optimieren, um die bei einem resizing der Matrix einmal vorbesetzten Werte nicht wieder zu löschen.
Das Coding ist auf das GWT KitchenSink Beispiel angepasst:
package org.matheclipse.gwt.client;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* Creates a resizable Matrix input
* @author Axel Kramer ( axelclk_gmail_com )
*/
public class Matrix extends Sink {
public static SinkInfo init() {
return new SinkInfo("Matrix", "Input the data of your matrix.") {
public Sink createInstance() {
return new Matrix();
}
};
}
private TextBox fRowsTextBox = new TextBox();
private TextBox fColumnsTextBox = new TextBox();
private HorizontalPanel fMatrixPanel = new HorizontalPanel();
private TextBox[][] fTextBoxArray;
private int fRows = 10;
private int fColumns = 12;
private Grid fMatrixGrid;
private TextBox fValue = new TextBox();
private final Button fDimButton = new Button("Set matrix dimensions");
private final Button fSetValueButton = new Button("Set cell value");
public Matrix() {
fDimButton.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
try {
int rows = Integer.parseInt(fRowsTextBox.getText());
int columns = Integer.parseInt(fColumnsTextBox.getText());
if (fRows > 0 && fRows <= 20 && fColumns > 0
&& fColumns <= 20) {
fRows = rows;
fColumns = columns;
createMatrix(fRows, fColumns);
}
} catch (NumberFormatException e) {
}
}
});
fSetValueButton.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
for (int i = 0; i < fRows; i++) {
for (int j = 0; j < fColumns; j++) {
fTextBoxArray[i][j].setText(fValue.getText());
}
}
}
});
fRowsTextBox.setText(Integer.toString(fRows));
fColumnsTextBox.setText(Integer.toString(fColumns));
HorizontalPanel dimensionPanel = new HorizontalPanel();
dimensionPanel.setSpacing(4);
dimensionPanel.add(new Label("Rows:"));
dimensionPanel.add(fRowsTextBox);
dimensionPanel.add(new Label("Columns:"));
dimensionPanel.add(fColumnsTextBox);
dimensionPanel.add(fDimButton);
HorizontalPanel valuePanel = new HorizontalPanel();
valuePanel.add(new Label("Cell value:"));
valuePanel.add(fValue);
valuePanel.add(fSetValueButton);
VerticalPanel verticalPanel = new VerticalPanel();
verticalPanel.setSpacing(8);
verticalPanel.add(dimensionPanel);
verticalPanel.add(valuePanel);
verticalPanel.add(fMatrixPanel);
createMatrix(fRows, fColumns);
setWidget(verticalPanel);
}
private void createMatrix(int rows, int columns) {
// clear old matrix widgets
fMatrixPanel.clear();
TextBox widget;
fTextBoxArray = new TextBox[rows][columns];
fMatrixGrid = new Grid(rows, columns);
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < columns; ++j) {
widget = new TextBox();
widget.setVisibleLength(5);
fMatrixGrid.setWidget(i, j, widget);
fTextBoxArray[i][j] = widget;
}
}
fMatrixGrid.setWidth("100%");
fMatrixGrid.setBorderWidth(1);
fMatrixGrid.setCellSpacing(1);
fMatrixPanel.add(fMatrixGrid);
}
}
Posted by axelclk
( Aug 03 2006, 06:37:56 PM CEST )
Permalink
Comments [0]