0
所以我有下面的代碼。的JDialog組件將不會出現
public class GraveyardFrame extends JDialog{
private List<JLabel> labelList = new ArrayList<>();
private List<Piece> pieces = new ArrayList<>();
public GraveyardFrame(final Player player) {
setSize(300,300);
setTitle("Graveyard Zone~ Watch out!!");
setResizable(false);
setModalityType(ModalityType.APPLICATION_MODAL);
setLocationRelativeTo(null);
setVisible(true);
createView(player); //here I add all the components
}
public void createView(Player player) {
JPanel mainPanel = new JPanel(new FlowLayout());
add(mainPanel);
mainPanel.setBackground(new Color(128,64,0));
createLabels(player ,mainPanel); //here I add the labels, that will take the icon of the dead pieces
this.pack();
}
private void createLabels(Player player , JPanel mainPanel) {
pieces.addAll(player.getPlayerGraveyard()); //pieces holds all the dead pieces
int sizeOfgraveyard = player.getPlayerGraveyard().size();
for (int i = 0 ; i < sizeOfgraveyard ; i++) {
JLabel label = new JLabel();
label.setSize(60, 60);
label.setIcon(pieces.get(i).getIcon());
labelList.add(label);
mainPanel.add(label);
mainPanel.validate();
mainPanel.repaint();
}
}
它應該彈出一個JDialog,它將棋盤上的所有棋子都顯示出來。 首先,我用一個JFrame,但是我發現,一個JFrame不能等待一個動作發生,然後才與主GUI繼續。(在的JDialog,使用ModalityType就夠了)。
的問題是,它不`噸顯示任何東西,只是一個空的JDialog框。我搜索了這個問題,並且here有人說你應該使用validate(),repaint()和pack()。我想這一點,因爲在上面的代碼,但還是沒有任何反應
這是應該的樣子(可與JFrame的替代的JDialog): 這是它的實際樣子(與上面的代碼):
它的工作原理。謝謝 ! – Tudor