如在這裏看到的:https://stackoverflow.com/a/27113623/7326194我創建了一個類似的劇院。JavaFX和addListener函數
我真的不知道如何正確使用addListener ..我希望客戶只能在一次選擇一個席位(時間上是一個紅色圓圈),但不能超過一個,所以我試圖如果客戶選擇一個不同於紅色座椅的新座椅,並且設置爲紅色新座椅,則將先前選定的紅色座椅設置爲空閒(如果是綠色和布爾佔用=假)。
你能幫我嗎?
我真的很感謝你的幫助。
class Seat extends Group {
Color freeColor = Color.rgb(30, 250, 40);
Color freeColorClasse = Color.rgb(255, 255, 0);
Color reservedColor = Color.rgb(170, 40, 40);
int contatoreBase = 0, contatorePC = 0;
BooleanProperty iamReserved = new SimpleBooleanProperty(false);
int myNo;
public Seat(int no) {
myNo = no;
Circle pillow = new Circle(12);
if (no <= 64) {
pillow.setFill(freeColorClasse);
}
else {
pillow.setFill(freeColor);
}
pillow.setStrokeWidth(1);
pillow.setStroke(Color.rgb(30, 40, 40));
getChildren().add(pillow);
Text lable = new Text(""+no);
lable.setFont(Font.font(11));
lable.setTextAlignment(TextAlignment.CENTER);
lable.setTextOrigin(VPos.CENTER);
lable.setLayoutX(-lable.getLayoutBounds().getWidth()/2);
getChildren().add(lable);
iamReserved.addListener((e, o, n) -> {
pillow.setFill(n ? reservedColor : (no > 64 ? freeColor: freeColorClasse));
});
setOnMouseClicked(m -> {
iamReserved.set(!iamReserved.get());
});
}
}
Pane theater1(Pane pane, String theater) {
double x = 20;
double y = 40;
int no = 1;
for (String row : theater.split("\n")) {
int count = 0;
for (int c : row.toCharArray()) {
switch (c) {
case 'x':
while (count-- > 0) {
Seat seat = new Seat(no++);
seat.setLayoutX(x);
x+=26;
seat.setLayoutY(y);
pane.getChildren().add(seat);
}
count = 0;
break;
case '0': case '1': case '2': case '3': case '4': case '5': case'6': case '7': case '8': case '9':
count = 10 * count + (c - '0');
break;
case '_':
x+=26;
break;
case '.':
x+=13;
break;
default: System.out.println("Unknown char: '"+(char)c+"'");
}
}
y+=36;
x = 20;
}
return pane;
}
這是代碼,只有部分創建劇院
完美James_D,這正是我一直在尋找!我正在學習JavaFX,並且我從來沒有聽說過ObjectProperty。 – Condo
感謝大家的幫助,現在我試着添加一個SQL數據庫來保留預訂的席位。 – Condo
嗨James_D,你的解決方案優雅而簡單。非常感謝。我有一些靜態和最終變量的問題。我的javaFX應用程序允許用戶預訂座位。我怎樣才能保存所選座位的變量(我必須檢查是否沒有人被選中,以及所選座位是否已經很忙)? – Condo