是否可以重新使用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");
}
});
有没有办法重复使用相同的吸气剂,而不是创造大量的吸气剂并记住我需要的吸气剂?就像在某个地方添加一个参数所以它可以通过一个吸气剂?或者我是否必须为每个值单独写一个?
答案 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()
时,您会更多/更少地告诉您所需的面板,并将其提供给您。