2017-03-29 77 views
0

我在GUI中有一個巨大的圖形元素字段,我需要根據我的值更改其屬性。在Java中帶有編號名稱的屬性更改

我想避免寫出switch,雖然它會起作用,但看起來很愚蠢。 我在HBox中有名爲r0 - r200的圖形屬性,我想要改變與其他函數的返回值相對應的元素的不透明度。

有一些聰明的辦法,優於:

switch(note.offGraphic()){ 

    case 0: 
     flat6.setOpacity(1); 
     break; 
    case 1: 
     flat5.setOpacity(1); 
     break; 
    case 2: 
     flat4.setOpacity(1); 
     break; 
    case 3: 
     flat3.setOpacity(1); 
     break; 
    case 4: 
     flat2.setOpacity(1); 
     break; 
    case 5: 
     flat1.setOpacity(1); 
    case 6: 
     ok.setOpacity(1); 
     break; 
` and on and on 
+2

你怎麼樣讓你的元素的數組,然後根據訪問索引,那麼它是一個單線程 –

+0

你幾乎可以使所有的Java都成爲一行...... – GameGibu

+0

什麼是'note'和'offGraphic()'返回的是什麼?可能有比使用地圖更好的方法,但不知道代碼的結構很難說。 – Thomas

回答

0

您可以創建一個地圖,而不是,將所有的變量到一個特定的整數(關鍵)和簡單地得到正確的變量取決於INT輸入並設置該變量的不透明度。

假設你總是做同樣的事情在每一種情況下,但是,當然

+0

爲什麼地圖呢? –

+0

我想一個簡單的數組/列表也可以工作,我個人更喜歡使用這種情況下的地圖。可能會有性能問題嗎? – CoqPwner

0

那要看是什麼flat1等是不同的變量,但如果他們是一些類或接口的實例,你可以使用地圖。

(編輯:看來你使用javafx.scene.Node你也許並不需要任何額外的接口。)

假設你的公寓等都是javafx.scene.Node情況下,你可以只使用它們的地圖:

Map<Integer, Node> map = ...; 
map.put(0, flat6); 
map.put(1, flat5); 
... 
map.put(6, ok); 
... 

然後使用它是這樣的:

Node n = map.get(note.offGraphic()); 
if(n != null) { 
    n.setOpacity(1); 
} 

或者,你的箱子可以顯示這些元素的表示,我.e。您只需提供一個元素列表,選擇一個元素並在其上調用setOpacity(1)

0

創建java數組並在相應的索引上插入每個變量。就像這樣:

Object[] flats = new Object[numberOfFlats]; 

爲了填補它:

flats[0]=flat6; 
     flats[1]=flat5; 
     flats[2]=flat4; 
    ..................... 
......................... 
........ 

我們得到它使用:

((Flat)flats[note.offGraphic()]).setOpacity(1); 
+0

注意:您無法在Object上調用setOpacity(1)。 – Thomas

+0

是的,但是您可以將對象投射到適當類型的扁平參考。 –