java - 单击按钮时将组件动态添加到 JDialog

标签 java swing jdialog

我想知道如何将组件动态添加到 JDialog。我知道在 SO here 上也有类似的问题,但如您所见,我将他的解决方案作为我代码的一部分。

所以我的想法是,在单击按钮时,我需要在对话框中添加一个组件。示例代码如下:

import java.awt.Container;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test extends JFrame {
/**
 * 
 */
private static final long serialVersionUID = 1L;

public static void main(String args[]) {
    Test test = new Test();
    test.createDialog();
}

public void createDialog() {
    DynamicDialog dialog = new DynamicDialog(this);
    dialog.setSize(300, 300);
    dialog.setVisible(true);
}
}

class DynamicDialog extends JDialog {
/**
 * 
 */
private static final long serialVersionUID = 1L;

public DynamicDialog(final JFrame owner) {
    super(owner, "Dialog Title", Dialog.DEFAULT_MODALITY_TYPE);
    final JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

    final JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
    panel.add(Box.createRigidArea(new Dimension(3, 10)));
    panel.add(createLabel("Click on add"));
    panel.add(Box.createRigidArea(new Dimension(23, 10)));
    panel.add(createLabel("To add another line of text"));
    panel.add(Box.createHorizontalGlue());
    mainPanel.add(panel);
    mainPanel.add(Box.createRigidArea(new Dimension(3, 10)));

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
    buttonPanel.add(Box.createHorizontalGlue());

    JButton button = new JButton();
    button.setText("Add another line");
    buttonPanel.add(button);
    mainPanel.add(buttonPanel);
    mainPanel.add(Box.createRigidArea(new Dimension(3, 10)));

    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            Container contentPane = owner.getContentPane();
            JPanel _panel = new JPanel();
            _panel.setLayout(new BoxLayout(_panel, BoxLayout.X_AXIS));
            _panel.add(Box.createHorizontalGlue());
            _panel.add(createLabel("Added!"));
            contentPane.add(_panel);

            contentPane.validate();
            contentPane.repaint();
            owner.pack();
        }
    });

    pack();
    setLocationRelativeTo(owner);
    this.add(mainPanel);
}

JLabel createLabel(String name) {
    JLabel label = new JLabel(name);
    return label;
}
}

最佳答案

如果您将它添加到主面板,它将起作用,您将它添加到框架的内容 Pane ,但它似乎没有显示在任何地方。

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {

        JPanel _panel = new JPanel();
        _panel.setLayout(new BoxLayout(_panel, BoxLayout.X_AXIS));
        _panel.add(Box.createHorizontalGlue());
        _panel.add(createLabel("Added!"));
        mainPanel.add(_panel);

        mainPanel.validate();
        mainPanel.repaint();
        owner.pack();
    }
})

关于java - 单击按钮时将组件动态添加到 JDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322781/

相关文章:

java - 自己的 RCP 中的 CommonNavigator - 应用程序不显示任何内容

java - 通过按键激活事件

JAVA:在 Jframe GUI 中将用户输入保存为字符串

Swing 中的 Java 创 build 计模式

java - Spring-JPA-data保存实体UNIQUE INDEX(两列,不是pk)违反不能抛出异常

java - java中使用nio包的socketChannel可以从客户端套接字中获取的最大数据大小

java.util.zip.ZipError : invalid CEN header (bad signature)

java - 旋转 JButton 的文本

java - 在 Netbeans 的设计模式下编辑嵌套 JDialog

javascript - 将函数作为回调传递给函数