【问题标题】:Get JTextField text from JDialog从 JDialog 获取 JTextField 文本
【发布时间】:2014-04-17 18:36:07
【问题描述】:

我有一个JFrame,我在JFrame 中有一个复选框,单击它会打开一个JDialog,然后添加一个我创建的JPanel

JPanel 内,我有两个JTextField 数组。 我需要将这些 JTextField 中的值获取到我的 JFrame 中,以便在方法中使用它们。

我尝试在面板中创建方法,但JDialog 看不到它们。

任何帮助表示赞赏。

public ProdDialog(String popUp, JFrame jFrame, DigiProduct p) {

    this.p = p;
    this.jframe = jFrame;

    JPanel popupPanels[] = new JPanel[] { cd = new CDPopup(p)};

    cdDialog = new JDialog(jFrame, true);
    cdDialog.setLocationRelativeTo(null);





    for (int i = 0; i < popupPanels.length; i++) {
        if (popUp.equals(popupPanels[i].getName())) {
            cdDialog.add(popupPanels[i]);
            cdDialog.setSize(popupPanels[i].getSize());
        }
    }
    cdDialog.setVisible(true);
}


public CDPopup(DigiProduct p) {

    this.setName("cd");
    this.p = p;
    this.setLayout(new BorderLayout());
    if(p.getAlbum().getSongList().size() >= 15)
    {
        this.setSize(690, 600);
    }
    else if(p.getAlbum().getSongList().size() < 11)
    {
        this.setSize(690, 410);
    }
    else
    {
        this.setSize(690, 490);
    }
    JPanel top = new JPanel(new GridBagLayout());
    this.setBorder(new TitledBorder("CD"));


    JPanel detailsPanel = new JPanel(new BorderLayout());
    detailsPanel.setPreferredSize(new Dimension(240, 80));
    this.add(detailsPanel, BorderLayout.WEST);

    JPanel details = new JPanel(new GridBagLayout());
    details.setBorder(border);
    details.setPreferredSize(new Dimension(150, 130));
    detailsPanel.add(details, BorderLayout.NORTH);

    JPanel spacer = new JPanel();
    spacer.setPreferredSize(new Dimension(200, 100));
    detailsPanel.add(spacer, BorderLayout.SOUTH);


    gc.gridx = 0;
    gc.gridy = 0;
    artist = new JLabel(" Artist");
    details.add(artist, gc);

    gc.gridx = 0;
    gc.gridy = 1;
    artistTBox = new JTextField(10);

    details.add(artistTBox, gc);


    JPanel songs = new JPanel(new GridBagLayout());
    songs.setPreferredSize(new Dimension(380, 200));
    songs.setBorder(border);

    songNumber = new JLabel(" No.");
    songName = new JLabel("Song");
    songLength = new JLabel("Length");

    JTextField[] digiProdDetailBx = new JTextField[p.getAlbum().getSongList().size()];
    JTextField[] digiProdDetailBx2 = new JTextField[p.getAlbum().getSongList().size()];
    JLabel[] digiProdDetailLb = new JLabel[p.getAlbum().getSongList().size()];


    for (int i = 0; i < p.getAlbum().getSongList().size(); i++) {

        int num = i +1;

        if (i == 0) {
            gc.gridx = 0;
            gc.gridy = 0;
            gc.anchor = GridBagConstraints.WEST;
            songs.add(songNumber, gc);
        }

        gc.gridx = 0;
        gc.gridy = i + 1;
        gc.gridwidth = 1;
        gc.gridheight = 1;
        gc.weighty = 0.0;
        gc.weightx = 2.0;
        gc.anchor = GridBagConstraints.WEST;
        digiProdDetailLb[i] = new JLabel(" " + num);
        digiProdDetailLb[i].setFont(font);
        songs.add(digiProdDetailLb[i], gc);

        if (i == 0) {
            gc.gridx = 1;
            gc.gridy = 0;
            songs.add(songName, gc);
        }
        gc.gridx = 1;
        gc.gridy = i + 1;
        gc.gridwidth = 1;
        gc.gridheight = 1;
        gc.weighty = 0.0;
        gc.weightx = 2.0;
        gc.gridwidth = 2;
        digiProdDetailBx[i] = new JTextField(p.getAlbum().getSongList().get(i).getSong_name());
        digiProdDetailBx[i].setPreferredSize(new Dimension(250, 20));
        songs.add(digiProdDetailBx[i], gc);

        if (i == 0) {
            gc.gridx = 3;
            gc.gridy = 0;
            songs.add(songLength, gc);
        }
        gc.gridx = 3;
        gc.gridy = i + 1;
        gc.gridwidth = 1;
        gc.gridheight = 1;
        gc.weighty = 0.0;
        gc.weightx = 2.0;
        gc.gridwidth = 2;
        digiProdDetailBx2[i] = new JTextField(p.getAlbum().getSongList().get(i).getSong_length());
        digiProdDetailBx2[i].setPreferredSize(new Dimension(50, 20));
        songs.add(digiProdDetailBx2[i], gc);

    }
    ;

    this.add(songs, BorderLayout.EAST);

    JPanel bottom = new JPanel(new FlowLayout());
    this.add(bottom, BorderLayout.SOUTH);

    add = new JButton("Add");
    add.setPreferredSize(new Dimension(60, 30));
    add.addActionListener(this);
    bottom.add(add);

    update = new JButton("Update");
    update.setPreferredSize(new Dimension(60, 30));
    update.addActionListener(this);
    bottom.add(update);

    this.setVisible(true);




}




public JTextField[] getDigiProdDetailBx() {
    return digiProdDetailBx;
}


public void setDigiProdDetailBx(JTextField[] digiProdDetailBx) {
    this.digiProdDetailBx = digiProdDetailBx;
}


public JTextField[] getDigiProdDetailBx2() {
    return digiProdDetailBx2;
}


public void setDigiProdDetailBx2(JTextField[] digiProdDetailBx2) {
    this.digiProdDetailBx2 = digiProdDetailBx2;
}

public void actionPerformed(ActionEvent e) {

    if(e.getSource().equals(update))
    {


    }


}

}

【问题讨论】:

  • 代码太多?哈哈。我们不需要您的整个程序。

标签: java jtextfield jdialog


【解决方案1】:

要获得已添加到 JDialog 的 JPanel,您应该使用如下循环:

for (Component c : cdDialog.getContentPane().getComponents()) {
    if (c instanceof JPanel) {
        //do work
    }
}

当您将组件添加到重量级容器时,它实际上会将它们添加到内容窗格中,因此您需要在内容窗格中搜索任何子项。

【讨论】:

  • 对不起,我看不懂你的代码,我还是个学生。我试图在我的 cdDialog 中实现它,但我仍然看不到 CDPopup JPanel 中的 getter,你能更详细地解释一下吗?
  • @Johntk,我的代码将循环浏览您添加到对话框cdDialog 的组件,并检查它们是否为JPanel。我显然不明白你想说什么。看起来您可能不是在搜索 JPanel,而是您正在调用 CDPopup 的类(它扩展了 JPanel),在这种情况下,您需要检查 c instanceof CDPopup,然后您可以将 c 转换为 CDPopup 和使用CDPopup中定义的方法。
  • 是的,我现在可以看到它们,谢谢,现在我只需要弄清楚剩下的部分。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 2019-11-25
相关资源
最近更新 更多