Java Getter方法 - 如何重用它们?

时间:2014-07-16 18:55:25

标签: java swing

是否可以重新使用getter,而不必为每个返回值创建一个(它们都是JPanel类型。

这是我的班级:

public class GamePanels {         
    JPanel begin, middle, end;  

public void begin(){            
    begin = new JPanel();  
    begin.setBackground(Color.MAGENTA);  
    JLabel beginLabel = new JLabel("Do you want to avoid using much of your brain?");  
    JButton beginYes = new JButton("Yes");  
    JButton beginNo = new JButton("No");  
    begin.add(beginLabel);  
    begin.add(beginYes);  
    begin.add(beginNo);                       
}  
public void middle(){  
    //code here  
}  
public void end(){  
    //code here  
}  


public JPanel getPanel(){  
    return begin;  
}  
public JPanel getPanel1(){  
    return middle;  
}  
public JPanel getPanel2(){  
    return end;  
}  
} 

这是我的主类的一个片段(actionListener使用的类:

newButton.addActionListener(new ActionListener(){  
        public void actionPerformed(ActionEvent e){               
            GamePanels g = new GamePanels();   
            g.begin();                            
            container.add("Begin", g.getPanel());  
            cl.show(container, "Begin");  
        }  
    }); 

有没有办法重复使用相同的吸气剂,而不是创造大量的吸气剂并记住我需要的吸气剂?就像在某个地方添加一个参数所以它可以通过一个吸气剂?或者我是否必须为每个值单独写一个?

3 个答案:

答案 0 :(得分:2)

是的,可以定义一个基于参数返回特定面板的getter。我在你的情况下做的方式(你发布的信息很少)将定义一个具有可能状态的枚举(假设你有一组已知的可能状态),并通过一个面板将一个面板关联到每个状态。查找地图。例如。 (我没有尝试编译此代码,它可能包含一些编译错误):

public enum GameState {
    BEGIN, MIDDLE, END;
}

public class GamePanels {
    private Map<GameState, JPanel> lookup = new HashMap<GameState, JPanel> ();
    private JPanel beginPanel;
    private JPanel middlePanel;
    private JPanel endPanel;

    public GamePanels () {
        // Initialize panels

        lookup.put (GameState.BEGIN, beginPanel);
        lookup.put (GameState.MIDDLE, middlePanel);
        lookup.put (GameState.END, endPanel);
    }

    public getPanel (GameState state) {
        JPanel panel = new JPanel ();

        if (lookup.containsKey (state)) {
            panel = lookup.get (state);
        }

        return panel;
    }
}

请注意,虽然这可行,但这可能不是此类问题的最佳实现。这个主题更适合Programmers.SE。

答案 1 :(得分:0)

我仍然会使用不同的getter,但会更好地命名它们,正如评论中已经提到的那样。

如果你坚持使用可重复使用的getter,那么你可以将你的JPanel映射到地图中,并将String作为键,然后按名称获取它们,你可以将它作为参数提供给getter方法。 / p>

答案 2 :(得分:0)

您可以将switch个案例用于不同的面板,将它们合并为一个getter。请注意,对于这些情况,使用与每个面板对应的最终变量(例如下面的beginPanelID)来表示您想要的面板可能会很方便。

public static final int beginPanelID = 1;

public JPanel getPanel(Integer whichPanel){

   switch(whichPanel){
       case beginPanelID: // aka case 1
          return begin;
       case 2:
          return middle;
       ...
       case X:
          return lastPanel;
       case default: // for any other cases
           return defaultPanel;
    }       
}

因此,当您致电getPanel()时,您会更多/更少地告诉您所需的面板,并将其提供给您。