2014-10-31 21 views
0

我試圖更改我的組件屬性。就像將它們的對齊方式設置爲向右或向左我在FlowLayout面板上有15個按鈕。最終不讓我更改屬性

final FlowLayout exL = new FlowLayout(FlowLayout.LEFT, 2, 3); 

    JPanel panel1 = new JPanel(); 
    panel1.setLayout(exL); 

    aligncom.addItemListener(new ItemListener() { 
     @Override 
     public void itemStateChanged(ItemEvent e) { 
      int x = aligncom.getSelectedIndex(); 
      switch (x) { 

       case 0: { 
        exL.setAlignment(FlowLayout.LEFT); 
        break; 
       } 
       case 1: { 
        exL.setAlignment(FlowLayout.RIGHT); 
        break; 
       } 
      } 
     } 
    }); 

我有這部分代碼。 「aligncom」是我的組合框。由於Java希望我聲明我的exL變量final,所以我認爲我無法更改我的按鈕的屬性。有什麼辦法可以運行這段代碼嗎?

+0

那麼,你有沒有試過運行該代碼?它會運行良好。 'final'只是說對象的引用(如果它是一個對象)不能改變;它不會阻止對該對象的調用方法,即使所述方法改變了它。變更對象不會改變其引用。 – fge 2014-10-31 18:23:04

+0

是的,我試着運行這段代碼,但沒有任何變化。也許我在其他代碼上做了錯誤的事情。 – HalilM 2014-10-31 18:29:32

回答

3

我想我不能改變我的按鈕的屬性

不,這不是真的。 final適用於變量,就是這樣。它不會阻止更改對象

換句話說,這將是無效的:

exL = new FlowLayout(...); // Trying to change a final variable 

...但調用setAlignment等是絕對的罰款。

+0

那麼爲什麼它不工作?當我在我的ComboBox中選擇RIGHT時,沒有任何變化。我的代碼錯了嗎?我認爲這是關於最後的宣言。 – HalilM 2014-10-31 18:22:25

+1

@HalilM雖然我不知道你正在使用的API,但我的猜測是你只需要在你的對象上使用'panel.setLayout()'_after_你修改了佈局 – fge 2014-10-31 18:24:37