有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我想在单击每个树节点时将要添加的信息放入jpanel jscrollpane中

我想在单击每个树节点时将要添加的信息放入jpanel jscrollpane中。。。请

一,。我想在树上控制所选树节点的状态。java where框架。爪哇

树。爪哇

package pms;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

public class Tree extends JTree {
private JTree tree;
public static int selectItem = 0;

public JTree CreateTree() {
    setLayout(new BorderLayout());
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("Management");
    DefaultMutableTreeNode bigLeaf1 = new DefaultMutableTreeNode("Generl Affair");
    DefaultMutableTreeNode bigLeaf2 = new DefaultMutableTreeNode("Personal Affair");
    final DefaultMutableTreeNode leaf2 = new DefaultMutableTreeNode("Recruit");
    final DefaultMutableTreeNode leaf3 = new DefaultMutableTreeNode("test");

    bigLeaf1.add(leaf2);
    bigLeaf2.add(leaf3);
    root.add(bigLeaf1);
    root.add(bigLeaf2);
    tree = new JTree(root);

    tree.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            TreePath tp = tree.getPathForLocation(e.getX(), e.getY());
            if (e.getClickCount() >= 2) {
                if (tp.getLastPathComponent() == leaf2) {
                    selectItem = 2;
                    System.out.println(selectItem);
                } else if (tp.getLastPathComponent() == leaf3) {
                    selectItem = 3;
                    System.out.println(selectItem);
                }
            }
        }
    });

    return tree;
    }

    public int selectedItem() {
        return selectItem;
    }
}

框架。爪哇

package pms;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class Frame extends JFrame implements Runnable {
    static int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
    static int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
    private JPanel pan1, pan2, pan3, pan4;
    public static JScrollPane jsp2;
    public Tree tree;
    public static ArrayList<Viewer> ViewArr = new ArrayList<Viewer>();
    public static int selectItem = 0;

    public Frame() {
        setTitle("Personal Management System");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(null); // AbsoulteLayout

        /** Create MenuBar */
        menuBar menubar = new menuBar();
        setJMenuBar(menubar.CreateMenuBar());

        pan1 = new JPanel(new GridLayout()); // TreeNode ScrollPane
        pan2 = new JPanel(new BorderLayout()); // toolbar & ScrollPane2
        pan1.setBounds(0, 0, 350, 950); // Fixed Panel Size
        pan2.setBounds(350, 0, 1300, 950);
        getContentPane().add(pan1);
        getContentPane().add(pan2);

        /** Create Tree */
        tree = new Tree();

        JScrollPane jsp1 = new JScrollPane(tree.CreateTree(), v, h);
        pan1.add(jsp1);

        /** Create toolbar Panel */
        pan3 = new toolBar().CreateToolbar();
        pan2.setLayout(new BorderLayout());
        pan2.add(pan3, "North");

        /** Create viewer ScrollPane */
        jsp2 = new JScrollPane(v, h);
        jsp2.setBackground(Color.cyan);

        pan2.add(jsp2, "East");
        setSize(1300, 950);
        setVisible(true);
    }

    public void ShowInterViewer() {
        selectItem = tree.selectedItem();
        try {
            if (selectItem == 2) {
                System.out.println("222");
            } else if (selectItem == 3) {
                System.out.println("333");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Frame frame = new Frame();
        frame.run();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            }
        });
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        ShowInterViewer();
    }
}

观众。爪哇

    package pms;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Viewer extends JPanel implements ActionListener{
    private JPanel jp;
    private JTextField tf1, tf2, tf3, tf4, tf5, tf6;
    private JLabel lb1, lb2, lb3, lb4, lb5, lb6;
    private JButton btn1;
    private String name, sex, pass, phone, picturePath, filePath;
    private Date birthday, interviewDate;

    public Viewer(String name, Date birthday, String sex, Date interviewDate, String pass, String phone) {
        setName(name);
        setSex(sex);
        setPass(pass);
        setPass(pass);
        CreateViewer();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        if(sex.equals("M")){
            this.sex = "남자";
        }else if(sex.equals("W")){
            this.sex = "여자";
        }
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        if(pass.equals("Y")){
            this.pass = "합격";
        }else if(pass.equals("N")){
            this.pass = "불합격";
        }
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPicturePath() {
        return picturePath;
    }

    public void setPicturePath(String picturePath) {
        this.picturePath = picturePath;
    }

    public String getFilePath() {
        return filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Date getInterviewDate() {
        return interviewDate;
    }

    public void setInterviewDate(Date interviewDate) {
        this.interviewDate = interviewDate;
    }

    public JPanel CreateViewer(){
        jp = new JPanel(new BorderLayout());

        tf1 = new JTextField(getName());
        tf1.setColumns(20);
        //tf1.setBounds(50,50,10,10);
        tf2 = new JTextField();
        tf2.setColumns(20);
        tf3 = new JTextField();
        tf3.setColumns(20);
        tf4 = new JTextField();
        tf4.setColumns(20);
        tf5 = new JTextField();
        tf5.setColumns(20);
        tf6 = new JTextField();
        tf6.setColumns(20);

        lb1 = new JLabel("이름");
        lb2 = new JLabel("생년월일");
        lb3 = new JLabel("성별");
        lb4 = new JLabel("면접일자");
        lb5 = new JLabel("합격여부");
        lb6 = new JLabel("연락처");

        btn1 = new JButton("이력서 보기");



        jp.add(tf1);
        jp.add(tf2);
        jp.add(tf3);
        jp.add(tf4);
        jp.add(tf5);
        jp.add(tf6);
        jp.add(lb1);
        jp.add(lb2);
        jp.add(lb3);
        jp.add(lb4);
        jp.add(lb5);
        jp.add(lb6);
        jp.add(btn1);

        return jp;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }
}

共 (1) 个答案

  1. # 1 楼答案

    首先,你真的不需要扩展一个JTree,你没有向类中添加任何新功能(也没有实际使用它),相反,只需要创建一个JTree的实例,并向它传递一个TreeModel的实例,该实例对你的数据进行建模

    这意味着您可以自由地向JTree添加一个TreeListSelection,它将在选择更改时告诉您。从结果TreeSelectionEvent中,您可以得到所选的path,它将告诉您从根节点到当前所选节点选择的组件。然后可以使用getLastPathComponent获取路径中的最后一个节点(即所选节点)

    一旦获得了这些信息,就可以决定如何最好地将其提供给相应的视图。因为您使用的是DefaultMutableTreeNode,所以可以将userObject与之关联,这样就更容易在每个节点上存储复杂的数据

    基于您的^ {{CD11>}类,看起来数据很普通化,在这种情况下,我会考虑创建POJO,它保持所有相关数据并简单地应用到^ {CD9>},这样您就可以使用^ {CD13>}轻松地提取它。然后,只需将该对象传递给Viewer面板(通过某种setter),并让查看器相应地更新它自己的状态

    查看How to Use Trees了解更多详细信息

    例如

    Tree

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.text.DateFormat;
    import java.time.LocalDate;
    import java.time.Month;
    import java.util.Date;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextField;
    import javax.swing.JTree;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.event.TreeSelectionEvent;
    import javax.swing.event.TreeSelectionListener;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreePath;
    
    public class InterviewBrowser {
    
        public static void main(String[] args) {
            new InterviewBrowser();
        }
    
        public InterviewBrowser() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                        ex.printStackTrace();
                    }
    
                    DefaultMutableTreeNode root = new DefaultMutableTreeNode("Management");
                    DefaultMutableTreeNode bigLeaf1 = new DefaultMutableTreeNode("Generl Affair");
                    DefaultMutableTreeNode bigLeaf2 = new DefaultMutableTreeNode("Personal Affair");
                    DefaultMutableTreeNode leaf2 = new DefaultMutableTreeNode(new InterviewHistory(
                                    "Bob",
                                    new Date(LocalDate.of(1972, Month.MARCH, 8).toEpochDay()),
                                    Sex.MALE,
                                    new Date(LocalDate.of(2015, Month.AUGUST, 10).toEpochDay()),
                                    false,
                                    "123456789"));
                    DefaultMutableTreeNode leaf3 = new DefaultMutableTreeNode(new InterviewHistory(
                                    "Jane",
                                    new Date(LocalDate.of(1973, Month.JANUARY, 1).toEpochDay()),
                                    Sex.FEMALE,
                                    new Date(LocalDate.of(2015, Month.AUGUST, 10).toEpochDay()),
                                    true,
                                    "87654321"));
    
                    bigLeaf1.add(leaf2);
                    bigLeaf2.add(leaf3);
                    root.add(bigLeaf1);
                    root.add(bigLeaf2);
                    DefaultTreeModel model = new DefaultTreeModel(root);
    
                    JTree tree = new JTree(model);
    
                    Viewer viewer = new Viewer();
    
                    tree.addTreeSelectionListener(new TreeSelectionListener() {
                        @Override
                        public void valueChanged(TreeSelectionEvent e) {
                            TreePath path = e.getPath();
                            Object lastPathComponent = path.getLastPathComponent();
                            if (lastPathComponent instanceof DefaultMutableTreeNode) {
                                DefaultMutableTreeNode node = (DefaultMutableTreeNode) lastPathComponent;
                                Object userObject = node.getUserObject();
                                if (userObject instanceof InterviewHistory) {
                                    InterviewHistory history = (InterviewHistory) userObject;
                                    viewer.setHistory(history);
                                } else {
                                    viewer.setHistory(null);
                                }
                            } else {
                                viewer.setHistory(null);
                            }
                        }
                    });
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(new JScrollPane(tree), BorderLayout.WEST);
                    frame.add(viewer);
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public enum Sex {
    
            MALE,
            FEMALE
        }
    
        public class InterviewHistory {
    
            private String name;
            private Date birthDate;
            private Sex sex;
            private Date interviewDate;
            private boolean passed;
            private String phone;
    
            public InterviewHistory(String name, Date birthDate, Sex sex, Date interviewDate, boolean passed, String phone) {
                this.name = name;
                this.birthDate = birthDate;
                this.sex = sex;
                this.interviewDate = interviewDate;
                this.passed = passed;
                this.phone = phone;
            }
    
            public String getName() {
                return name;
            }
    
            public Date getBirthDate() {
                return birthDate;
            }
    
            public Sex getSex() {
                return sex;
            }
    
            public Date getInterviewDate() {
                return interviewDate;
            }
    
            public boolean didPass() {
                return passed;
            }
    
            public String getPhone() {
                return phone;
            }
    
            @Override
            public String toString() {
                return getName();
            }
    
        }
    
        public static class Viewer extends JPanel {
    
            public static final DateFormat DATE_FORMAT = DateFormat.getDateInstance();
    
            private JTextField name;
            private JTextField dateOfBirth;
            private JLabel sex;
            private JTextField dateOfInterview;
            private JCheckBox passed;
            private JTextField phone;
    
            public Viewer() {
                setLayout(new GridBagLayout());
    
                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridx = 0;
                gbc.gridy = 0;
                gbc.anchor = GridBagConstraints.WEST;
    
                add(new JLabel("Name: "), gbc);
                gbc.gridy++;
                add(new JLabel("Date of birth: "), gbc);
                gbc.gridy++;
                add(new JLabel("Sex: "), gbc);
                gbc.gridy++;
                add(new JLabel("Date of Interview: "), gbc);
                gbc.gridy++;
                add(new JLabel("Passed interview: "), gbc);
                gbc.gridy++;
                add(new JLabel("Phone: "), gbc);
    
                name = new JTextField(25);
                dateOfBirth = new JTextField(10);
                sex = new JLabel("?");
                dateOfInterview = new JTextField(10);
                passed = new JCheckBox();
                phone = new JTextField(9);
    
                gbc.gridx++;
                gbc.gridy = 0;
    
                add(name, gbc);
                gbc.gridy++;
                add(dateOfBirth, gbc);
                gbc.gridy++;
                add(sex, gbc);
                gbc.gridy++;
                add(dateOfInterview, gbc);
                gbc.gridy++;
                add(passed, gbc);
                gbc.gridy++;
                add(phone, gbc);
    
            }
    
            public void setHistory(InterviewHistory history) {
                name.setText(history == null ? null : history.getName());
                dateOfBirth.setText(history == null ? null : DATE_FORMAT.format(history.getBirthDate()));
                sex.setText(history == null ? "?" : history.getSex().name());
                dateOfInterview.setText(history == null ? null : DATE_FORMAT.format(history.getInterviewDate()));
                passed.setSelected(history == null ? false : history.didPass());
                phone.setText(history == null ? "?" : history.getPhone());
            }
    
        }
    }
    

    不要依赖于static变量的状态,这种状态很容易不反映现实,相反,依赖于您可以从视图/模型的状态确定的实际已知值

    任何模型的目的都是为您提供一种显示数据的机制,您应该使用它直接包装数据,而不是试图猜测UI或模型的状态,然后单独查找数据(IMHO)