0
我的GWT項目是一個簡單的日曆。您可以通過單擊表格單元格來添加日期,該表格單元格打開一個對話框以輸入名稱和描述。 當您點擊「確定」或取消「Abbrechen」時,日期將寫入表格。 我的代碼(在Eclipse構建):GWT - 按鈕ClickEvent後整個表中的值相同
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTMLTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.HTMLTable.Cell;
import com.google.gwt.user.client.ui.RootPanel;
public class ShowCase implements EntryPoint {
int a = 24; // Anzahl Zeit-Zeilen (Normalfall 24 -> 0:00 - 23:00)
int start = 7;
int end = 21;
DecoratorPanel panel = new DecoratorPanel();
Grid t = new Grid((a + 1), 8); //
String days[] = { " ", "Montag", "Dienstag", "Mittwoch", "Donnerstag",
"Freitag", "Samstag", "Sonntag" };
String data = null, str1 = null, str2 = null;
DialogBox dialog = new DialogBox();
Grid dialoggrid = new Grid(3, 2); // Grid-Layout für gesamte DialogBox
Label lname = new Label("Name");
Label lbeschr = new Label("Beschreibung");
TextBox tbname = new TextBox();
TextBox tbbeschr = new TextBox();
Button ok = new Button("OK");
Button cancel = new Button("Abbrechen");
int indexrow, indexcol;
DialogBox leer = new DialogBox();
Button okleer = new Button("OK");
public void onModuleLoad() {
t.setBorderWidth(1);
t.setCellSpacing(0);
for (int row = 0; row < (a + 1); row++) {
for (int col = 0; col < 8; col++) {
if (col == 0) {
int z = row - 1;
System.out.println("Spalte 0 Zeit setzen: " + row);
t.setText(row, col, z + ":00"); // Spalte 0 Zeit setzen
} else {
t.setText(row, col, "");
}
t.setText(0, col, days[col]); // Tage aus days in Zeile 0 setzen
t.getCellFormatter().setWidth(row, 0, "50px");
t.getCellFormatter().setWidth(row, col, "150px");
}
} // end for(int row=0...)
panel.add(t);
RootPanel.get("content").add(panel);
t.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
System.out.println("Neuer Klick!");
Cell cell = ((HTMLTable) event.getSource()).getCellForEvent(event);
System.out.println("Cell cell HTML Table");
/*if (data.equals("1")){
tbname.setText(text);
tbbeschr.setText(null);
}*/
System.out.println("data1: " + data);
// Uhrzeit-Spalte und Wochentagsreihe absichern
if(!(cell.getRowIndex() == 0) && !(cell.getCellIndex() ==0)){
System.out.println("Get Index(): " + cell.getRowIndex() + "," + cell.getCellIndex()); // Ausgabe von Reihe und Spalte
final int indexrow = cell.getRowIndex();
final int indexcol = cell.getCellIndex();
// Dialog belegen und anzeigen
dialoggrid.setCellSpacing(0);
dialoggrid.setCellPadding(0);
tbname.setText(null);
tbbeschr.setText(null);
System.out.println("TBName: " + tbname.getText());
System.out.println("TBBeschr: " + tbbeschr.getText());
dialoggrid.setWidget(0, 0, lname);
dialoggrid.setWidget(1, 0, lbeschr);
dialoggrid.setWidget(2, 0, ok);
dialoggrid.setWidget(0, 1, tbname);
dialoggrid.setWidget(1, 1, tbbeschr);
dialoggrid.setWidget(2, 1, cancel);
dialog.setWidget(dialoggrid);
dialog.center();
dialog.setModal(false);
if(tbname.getText().equals(null)){
System.out.println("if tbname.getText equals null");
}
System.out.println("Dialog show");
dialog.show();
ok.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
System.out.println("ok Click");
// Überprüfen ob TextBox Name und Beschreibung nicht leer sind
if ((!tbname.getText().equals(null)) && (!tbbeschr.getText().equals(null))) {
System.out.println("Wenn tbname & tbbeschr nicht leer sind");
str1 = tbname.getText();
str2 = tbbeschr.getText();
data = str1 + ", " + str2;
t.setText(indexrow, indexcol, data);
dialog.hide();
System.out.println("#1: "+data+"#");
data = null;
System.out.println("#2: "+data+"#");
} else {
System.out.println("leer!");
leer.setText("Felder duerfen nicht leer sein!");
leer.add(okleer);
leer.center();
leer.setModal(true);
leer.show();
okleer.addClickHandler(new ClickHandler(){
public void onClick(ClickEvent event){
System.out.println("okleer click");
leer.hide();
}
});
} // end else
}
}); // end ok.addClickHandler
cancel.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
System.out.println("cancel Click");
dialog.hide();
tbname.setText(null);
tbbeschr.setText(null);
}
}); // end cancel.addClickHandler
} // end if(!(cellindex) && !(rowindex) =0)
} // end public void OnClick()
}); // end t.addClickHandler
} // end onModuleLoad(}
的問題是,是,通過在對話框中輸入名稱&描述,然後單擊「確定」,這將覆蓋所有點擊細胞(也被取消對話框細胞)與來自我當前對話框的值。 一些測試用例在控制檯輸出(由OK-點擊它讓人更OK,點擊每個單擊的單元格):
Neuer Klick!
Cell cell HTML Table
data1: null
Get Index(): 1,1
TBName:
TBBeschr:
Dialog show
ok Click
Wenn tbname & tbbeschr nicht leer sind
#1: rt, qw#
#2: null#
Neuer Klick!
Cell cell HTML Table
data1: null
Get Index(): 1,2
TBName:
TBBeschr:
Dialog show
ok Click
Wenn tbname & tbbeschr nicht leer sind
#1: gh, tz#
#2: null#
ok Click
Wenn tbname & tbbeschr nicht leer sind
#1: gh, tz#
#2: null#
爲什麼?還是有更好的可能性來「管理」代碼?
謝謝。我試過了,但沒有幫助。 :/ – quantatheist
查看我的更新回答 – dhamibirendra
對不起,我忘了我的帖子。 :D聖誕快樂。謝謝,現在它工作正常。我嘗試了一下,就像你做的那樣(sry,忘了告訴我,我做了什麼),但它是錯誤的(run只有一次)。是的,我對GWT很新。另一個問題:哪個數據庫是保存和加載值的好方法?感謝您的幫助,祝您新年快樂。 :) – quantatheist