【问题标题】:JDialog components won't show upJDialog 组件不会显示
【发布时间】:2017-10-16 11:47:11
【问题描述】:

所以我有以下代码。

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): 这就是它的实际外观(使用上面的代码):

【问题讨论】:

    标签: java jdialog


    【解决方案1】:

    您在createView() 之前调用setVisible(true)。但由于它是模态的JDialog,因此调用setVisible() 实际上会阻塞,直到对话框被关闭。所以,createView() 只会在对话框关闭后被调用。

    只需更改两个方法调用的顺序,首先是createView(),然后是setVisible(true),它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 2015-12-24
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 2020-12-04
      • 1970-01-01
      相关资源
      最近更新 更多