2014-10-02 98 views
0

我寫了一個Java類,其中我設置了某些JButtons,標籤和文本的隱形/可見性。是否可以顛倒Java類中的所有布爾值?

我也想建立一個「重置」按鈕,其中的一切看起來像程序剛剛開始,所以我的問題:是否有可能顛倒類中的所有布爾值,以便不寫一個新的類或命令來設置可見性?

提前感謝

編輯:

類基本上是這樣的:

無效可見(){

jLA.setVisible(true); 
    jLB.setVisible(true); 
    jBÜbernehmen2.setVisible(true); 
    jLN.setVisible(true); 
    jLNA.setVisible(true); 
    jLNote.setVisible(true); 
    jLS.setVisible(true); 

}

所有Swing元素髮起無形。 我知道我可以重寫命令,但我認爲必須有一個更好的方式來管理swing元素的屬性,因爲這可能以一個巨大的混亂代碼結束。

+0

功能哪些設定值是適合它的解決方案。 – 2014-10-02 17:46:44

+1

顯示您的java類,以便我們能夠向您展示解決方案 – shinjw 2014-10-02 17:48:22

+0

單擊重置按鈕時,再次調用您的java類,它將重置頁面。請分享一些代碼,以便更好地瞭解 – 2014-10-02 17:48:47

回答

2

這聽起來像你想布爾值重置爲初始預期值,而不是反轉他們,所以我會解決的復位部分。

這也許是HashMap的一個更瘋狂的用法,但我敢說它可能實際上是實用的。

首先,我們將需要一個作爲鍵的JComponents的HashMap,將它們的可見性映射爲值作爲字段。

HashMap<JComponent, Boolean> defaultVisibility = new HashMap<JComponent, Boolean>(); 

假設我們有這些按鈕。

JButton foo = new JButton("Foo"); 
JButton bar = new JButton("Bar"); 

我們繼續前進,並將這些按鈕放到構造函數的實例化面板結尾的HashMap中。

defaultVisibility.put(foo, foo.isVisible()); 
defaultVisibility.put(bar, bar.isVisible()); 

要抽象出來,假設您有一個包含七十個獨立組件的JFrame。手工編碼這是一場噩夢。我們可以創建一個很好的recurisve方法來幫助我們。

public void setDefaultVisibility(JComponent j) { 
    defaultVisibility.put(j, j.isVisible()); 
    for(JComponent c : j.getComponents()) { 
     setDefaultVisibility(c); 
    } 
} 

現在我們擁有所有的默認狀態,我們可以用這個漂亮的空隙 - 每個元素的可見性設置爲它是什麼,當我們設置。

public void makeDefaultVisibility() { 
    for(Entry<JComponent, Boolean> j : defaultVisibility.entrySet()) { 
     j.getKey().setVisible(j.getValue()); 
    } 
} 
+0

非常感謝你,這正是我所需要的。我會upvote,如果我可以XD – SklogW 2014-10-02 18:47:54

+0

沒問題,@SklogW,我只是做了。 – DSlomer64 2014-10-22 23:17:33

0
boolean test = false; 
test = !test; 

這是如何反轉布爾值。在類中創建一個重置所有布爾值的方法。該方法需要公開,但變量本身仍然可以是私有的。

0

請注意,「顛倒所有布爾值」並未達到「重置爲原始狀態」的目標。如果只有一些值發生變化,則反轉所有值不會導致原始狀態。

如果對象有一個「默認狀態」,那麼它應該知道某個級別的狀態,對吧? (或者至少能夠與該州的一些指標來提供)事情是這樣的:

public class SomeClass { 
    private boolean defaultValue = false; 
    private boolean currentValue = false; 

    public boolean getCurrentValue() { 
     return currentValue; 
    } 

    public void setCurrentValue(boolean newValue) { 
     this.currentValue = newValue; 
    } 
} 

基本上你需要說,這樣的地方以後可以在被稱爲原始默認狀態活動狀態發生變化時的應用程序。然後將該對象恢復到原來的狀態,只要創建一個確實是一個方法:

public void resetToDefault() { 
    this.currentValue = this.defaultValue; 
} 

簡單重複的對象中的任何其他值。

3

試試下面這段代碼,它通過反射反轉所有的布爾類型的字段,並顯示:

import java.lang.reflect.Field; 
import java.util.ArrayList; 
import java.util.List; 


public class Test { 

    private boolean var1=false; 
    private boolean var2=true; 

    public void resetBooleanFields(Class<?> clazz) 
    { 
     List<Field> toReturn = new ArrayList<Field>(); 

     Field[] allFields = clazz.getDeclaredFields(); 

     for (Field f : allFields) 
     { 
      Class<?> type = f.getType(); 
      if (type.equals(boolean.class)) 
      { 
       try { 
        f.set(this,!(Boolean)f.get(this)); 
       } catch (IllegalArgumentException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       try { 
        System.out.println(f.get(this)); 
       } catch (IllegalArgumentException | IllegalAccessException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 

    } 

    public static void main(String[] args) { 
     Test tst = new Test(); 
     tst.resetBooleanFields(Test.class); 

    } 

} 
1

可以使用可變參數的方法來進行調用多個組件:

public static void setVisibleMulti(boolean v, JComponent ... components) { 
    for (JComponent component : component) 
     component.setVisible(v); 
} 

// example call 
setVisibleMulti(true, jLA, jLB, jBÜbernehmen, ...........); 
0

我不得不做一個完整的程序,以確保我瞭解Compass在駕駛什麼,並希望可以發佈爲答案。我做了一些修改,使其能夠編譯並且沒有警告/建議(可能不是所有必要的),並添加了幾個曲折(選擇默認可見性和重命名方法)。謝謝,指南針,一個非常好的輪廓。我更瞭解哈希映射,希望我發佈的內容能夠幫助其他人。

package hashmaptoresetbooleans; 
import java.awt.Component; 
import java.util.HashMap; 
import java.util.Map.Entry; 
import javax.swing.JButton; 
import javax.swing.JComponent; 

public class HashMapToResetBooleans 
{ 
    static HashMap<JComponent, Boolean> defaultVisibility; 

    public  HashMapToResetBooleans() 
    { 
    HashMapToResetBooleans   .defaultVisibility = new HashMap<>(9); 
    } 

    public static void setDefaultVisibility(JComponent j, boolean v) 
    { 
    defaultVisibility.put(j, v); 

    for(Component c : j.getComponents()) 
    { 
     setDefaultVisibility((JComponent) c, v); 
    } 
    } 

    public static void setToDefaultVisibility() 
    { 
    for(Entry <JComponent, Boolean> j : defaultVisibility.entrySet()) 
    { 
     j.getKey().setVisible(j.getValue()); 
    } 
    } 

    public static void main(String[] args) 
    { 
    new HashMapToResetBooleans(); 

    JButton foo = new JButton("Foo"); 
    JButton bar = new JButton("Bar"); 

    setDefaultVisibility(foo, false); 
    setDefaultVisibility(bar, true); 

    // ... later on ... 
    foo.setVisible(true); 
    bar.setVisible(false); 

    // ... later yet ... 
    setToDefaultVisibility(); 

    System.out.println(foo.isVisible()); 
    System.out.println(bar.isVisible()); 
    } 
} 
相關問題