【问题标题】:How can show a JTree in a JDialog?如何在 JDialog 中显示 JTree?
【发布时间】:2023-03-12 02:40:01
【问题描述】:

我想将JTree 放在JDialog 中,以便用户可以在树层次结构中选择一个项目并通过单击“确定”按钮确认选择。用户可以通过单击 CANCEL 按钮取消选择。

在 Java Swing 应用程序中获取该对话框的最简单方法是什么?

【问题讨论】:

  • 你研究过这个吗?你能告诉我们你的代码并解释你卡在哪里吗?像 this question、that question 或 this tutorial 这样的 Google 结果表明,可以像 JFrame 一样轻松修改对话框;并且 JOptionPane 可以更快地实现。
  • 嗨,我专门搜索了一个JTree示例。对于那个很抱歉。您提供的链接非常适合跟进。谢谢你。
  • @The_Cute_Hedgehog,I specifically searched for a JTree example. - 你读过 JTree API 吗? API 有一个指向 Swing 教程的链接,其中包含所有 Swing 组件的工作示例。

标签: java swing jtree jdialog


【解决方案1】:

试试这个: 首先像这样创建一个App:

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;

public class App {

    private JFrame frame;
    private JTextField textField;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    App window = new App();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public App() {
        initialize();
    }

    public void setValue(Object obj) {
        textField.setText(obj.toString());
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton btnOpen = new JButton("Open");
        btnOpen.setBounds(100, 57, 177, 43);
        btnOpen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                new MyDialog(App.this).setVisible(true);
            }
        });
        frame.getContentPane().setLayout(null);
        frame.getContentPane().add(btnOpen);

        textField = new JTextField();
        textField.setBounds(100, 126, 177, 19);
        frame.getContentPane().add(textField);
        textField.setColumns(10);
    }
}

然后在同一个包中创建MyDialog:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.border.EmptyBorder;
import javax.swing.tree.DefaultMutableTreeNode;

public class MyDialog extends JDialog {

    private final JPanel contentPanel = new JPanel();
    private JTree tree = null;


    public MyDialog(App ref) {
        setModalityType(ModalityType.APPLICATION_MODAL);
        setTitle("MyDialog");
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        getContentPane().add(contentPanel, BorderLayout.CENTER);
        contentPanel.setLayout(new BorderLayout(0, 0));

        {
            tree = new JTree();
            contentPanel.add(tree);
        }
        {
            JPanel buttonPane = new JPanel();
            buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
            getContentPane().add(buttonPane, BorderLayout.SOUTH);
            {
                JButton okButton = new JButton("OK");
                okButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent arg0) {
                        DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
                        if (node == null)
                            return;
                        Object userObject = node.getUserObject();

                        ref.setValue(userObject);
                        MyDialog.this.dispose();
                    }
                });
                okButton.setActionCommand("OK");
                buttonPane.add(okButton);
                getRootPane().setDefaultButton(okButton);
            }
            {
                JButton cancelButton = new JButton("Cancel");
                cancelButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent arg0) {
                        MyDialog.this.dispose();
                    }
                });
                cancelButton.setActionCommand("Cancel");
                buttonPane.add(cancelButton);
            }
        }
    }
}

应用程序将部署一个带有树的对话框。如果您选择一个树节点并点击“确定”,它将关闭对话框并在应用程序的文本字段中显示该值。 “取消”将中止整个过程。它对我有用。

希望对你有帮助

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 2020-07-13
相关资源
最近更新 更多