0

是的,这可能看起来像一个重复的问题,但请耐心等待。采取下面的代码,这是功能性的:

private void setMainLayout(Container pane) {

    String imagePath = Start.getProperty("IMAGE_DIR");      

    characters.add(char1); // pseudocode
    characters.add(char2);
    characters.add(char3);
    characters.add(char4);

    // "CharacterDisplay.getMainLayout()" returns a Box object:
    for (CharacterDisplay character : characters)
        character.getMainLayout().setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.WHITE));

    // "mainFrame" is a JFrame:
    mainFrame.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();

    /* do random gridbagconstraints stuff */   

    pane.add(characters.get(0).getMainLayout(), gbc);

    /* do random gridbagconstraints stuff */   

    // "nonCharacterArea" is a JPanel:    
    nonCharacterArea.setOpaque(true);
    nonCharacterArea.setBackground(Color.BLACK);
    nonCharacterArea.setLayout(new GridBagLayout());
    GridBagConstraints constCenter = new GridBagConstraints();

    /* do random gridbagconstraints stuff */  

    nonCharacterArea.add(actionPane, constCenter); // actionPane is a kind of JPanel

    /* do random gridbagconstraints stuff */        

    nonCharacterArea.add(menuPane, constCenter); // menuPane is a kind of JPanel
    pane.add(nonCharacterArea, gbc);

    /* do random gridbagconstraints stuff */      

    pane.add(characters.get(1).getMainLayout(), gbc);

    gbc.gridx = 0;
    gbc.gridy = 2;      

    pane.add(characters.get(2).getMainLayout(), gbc);

    gbc.gridx = 2;
    gbc.gridy = 2;        

    pane.add(characters.get(3).getMainLayout(), gbc);
} // setMainLayout

我希望能够actionPane在执行期间动态更改对象。实现这一目标的最佳方法是什么?我专门编写了这个伪代码块,以表明它并不像人们在类似问题中发布的其他示例那样简单——因为它基于 JPanel 在屏幕上某个位置的精确放置,而这个 setMainLayout () 方法不必在每次我只想更改 actionPane 对象时调用。

有时是横屏,有时是商店界面,可以是很多不同的东西。

想法?谢谢。

4

2 回答 2

4

如果它actionPane是从一小组预定义的面板中获取的,并且具有相对较小的实时更新和更改,那么一个不错的选择是使用CardLayout,并根据需要在预定义的 actionPanes 之间切换。

如果 actionPane 非常动态并且您真的无法提前预测它可能是什么,那么@Greg Kopff 有一个合理的答案。

于 2012-07-10T23:11:53.563 回答
3

不要添加和删除actionPane- 保留它,而是添加/删除子组件到actionPane. 然后,此任务变得相对微不足道,因为actionPane仅包含一个组件。

于 2012-07-10T23:02:35.283 回答