是的,這可能看起來像一個重複的問題,但忍受着我。採取下面的代碼,即功能:如何動態更改JFrame內的JPanel引用?
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
我希望能夠在執行過程中動態地改變0對象。什麼是完成這個最好的方法?我專門編寫了這個僞代碼塊,以表明它不僅僅是人們在類似問題中發佈的其他示例一樣簡單 - 因爲它基於在屏幕上某個位置精確放置JPanel,並且此setMainLayout ()方法不應該在每次我只想改變actionPane對象時被調用。
有時它會是一個側面滾動的屏幕,有時它會是一個商店界面,它可以是許多不同種類的東西。
想法?謝謝。