我有JFrame
,JFrame
中有一个复选框,点按后会打开JDialog
,然后添加我创建的JPanel
。
在JPanel
内,我有2个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))
{
}
}
}
答案 0 :(得分:1)
要获得已添加到JDialog的JPanel,您应该使用类似这样的循环:
for (Component c : cdDialog.getContentPane().getComponents()) {
if (c instanceof JPanel) {
//do work
}
}
当您向重量级容器添加组件时,它实际上会将它们添加到内容窗格中,因此您需要在内容窗格中搜索任何子级。