Java tutorial
/** * Copyright 2017 Institute of Computing Technology, Chinese Academy of Sciences. * Licensed under the terms of the Apache 2.0 license. * Please see LICENSE file in the project root for terms */ package eml.studio.client.ui.widget.panel; import eml.studio.client.ui.widget.program.SqlProgramWidget; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; /** * Sql script program widget configuration table * * - Can dynamically add or delete input or output files of the widget in the table * */ public class SqlScriptFileConfigTable extends FlexTable { protected String name = null; protected SqlProgramWidget widget = null; public SqlScriptFileConfigTable(SqlProgramWidget widget, String name) { this.widget = widget; this.name = name; this.insertRow(0); Label add = new Label(); add.addStyleName("admin-user-edit"); this.setWidget(0, 0, new Label(name)); this.setWidget(0, 1, new Label()); this.setWidget(0, 2, add); this.setWidget(0, 3, new Label()); add.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { int i = 0; while (i < SqlScriptFileConfigTable.this.getRowCount() && SqlScriptFileConfigTable.this.getWidget(i, 2) != event.getSource()) i++; if (i < SqlScriptFileConfigTable.this.getRowCount()) { addRow(i, ""); } } }); } public int getCount() { return this.getRowCount() - 1; } public void deleteRow(int row) { this.removeRow(row); for (int i = row; i < this.getRowCount() - 1; ++i) { Label label = (Label) this.getWidget(i, 0); label.setText(name + " " + i); } active(); } public void addRow(String aliases) { addRow(this.getRowCount() - 1, aliases); } public void addRow(int row, String default_text) { TextBox box = new TextBox(); box.setText(default_text); addRow(row, box); } protected void addRow(int row, TextBox box) { this.insertRow(row); this.setWidget(row, 0, new Label(name + " " + row)); this.setWidget(row, 1, box); Label add = new Label(); add.addStyleName("admin-user-edit"); Label del = new Label(); del.addStyleName("admin-user-delete"); this.setWidget(row, 2, add); this.setWidget(row, 3, del); for (int i = row + 1; i < this.getRowCount() - 1; ++i) { Label label = (Label) this.getWidget(i, 0); label.setText(name + " " + i); } add.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { int i = 0; while (i < SqlScriptFileConfigTable.this.getRowCount() && SqlScriptFileConfigTable.this.getWidget(i, 2) != event.getSource()) i++; if (i < SqlScriptFileConfigTable.this.getRowCount()) { addRow(i, ""); } } }); del.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { int i = 0; while (i < SqlScriptFileConfigTable.this.getRowCount() && SqlScriptFileConfigTable.this.getWidget(i, 3) != event.getSource()) i++; if (i < SqlScriptFileConfigTable.this.getRowCount()) { deleteRow(i); } } }); active(); } protected void active() { widget.active(); } public SqlScriptFileConfigTable clone() { SqlScriptFileConfigTable st = new SqlScriptFileConfigTable(this.widget, this.name); for (int i = 0; i < this.getRowCount() - 1; i++) { for (int j = 0; j < 4; j++) { st.setWidget(i, j, this.getWidget(i, j)); } } active(); return st; } }