java - 来自数据库的动态 Jtree

标签 java swing jdbc hashmap jtree

我有一个名为 tree1 的数据库表,其中有一个名为 student_details 的表。该表有 3 列 student_name、student_details、student_phone

现在,我能够从数据库中检索学生详细信息,但只能以静态方式。

问题是当我插入一个新的学生详细信息行 {student_name,student_details,student_phone} 我希望它显示在我的 Jtree 上。尽管 Hashmap 是解决方案,但我无法理解如何在 Jtree 中使用 hashmap 来创建动态节点。

下面是我可以从中创建静态 Jtree 的代码,我想让它成为动态的。谁能告诉我如何使用代码示例执行此操作?

package tree_try;


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.beans.Statement;
import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;


public class SimpleTree extends JFrame
{
   public Connection connect = null;


   public Statement statement = null;
   public Statement statement2 = null;
    public Statement statement3 = null;
      public Statement statement4 = null;
   public Statement statement5 = null;
    public Statement statement6 = null;

   public ResultSet resultSet = null;
   public ResultSet resultSet2 = null;
    public ResultSet resultSet3 = null;
     public ResultSet resultSet4 = null;
   public ResultSet resultSet5 = null;
    public ResultSet resultSet6 = null;



   public ArrayList arrayList = new ArrayList();
   public ArrayList arrayList2 = new ArrayList();
   public ArrayList arrayList3 = new ArrayList();
   public ArrayList arrayList4 = new ArrayList();

   static String store[] = new String[10];
   static String store2[] = new String[10];
   static String store3[] = new String[10];

   //for the panel

   static String store4[] = new String[10];
   static String store5[] = new String[10];
   static String store6[] = new String[10];
    static String store7[] = new String[10];

   //for panel over


   int i=0;
   int i1=0;
   int i2=0;
   int i3=0;



    JPanel jp1 = new JPanel();
    JPanel jp2 = new JPanel();
    JFrame jf1 = new JFrame();

    JButton jb1 = new JButton("Save");
       JButton jb2 = new JButton("Cancel");

    JTextField jt1= new JTextField();
    JTextField jt2 = new JTextField();
    JTextField jt3= new JTextField();
    JTextField jt4 = new JTextField();



    JLabel jl0 = new JLabel();

    JLabel jl1 = new JLabel("Name : ");
    JLabel jl2 = new JLabel("Adress : ");
    JLabel jl3 = new JLabel("Phone Number : ");
    JLabel jl4 = new JLabel("Other Deatils : ");
    JLabel jl5 = new JLabel("");


  public static void main(String[] args)
  {
    new SimpleTree();
  }

  public SimpleTree() 
  {

    super("Schools database");
    WindowUtilities.setNativeLookAndFeel();
    addWindowListener(new ExitListener());





     //db part
      try 
                {
            Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
            connect = DriverManager.getConnection("jdbc:derby://localhost:1527/treedata1","suraj","suraj");
            PreparedStatement statement = connect.prepareStatement("SELECT * from school_details");
                        PreparedStatement statement2 = connect.prepareStatement("select student_name from student_details where s_id =1");   
                         PreparedStatement statement3 = connect.prepareStatement("select student_name from student_details where s_id =2");   

                         //for the panel display


                         //PreparedStatement statement5 = connect.prepareStatement("select student_name from student_details where s_id =1");   
                         //PreparedStatement statement6 = connect.prepareStatement("select student_name from student_details where s_id =2");



            resultSet = statement.executeQuery();
            while (resultSet.next()) 
                        {
                String sname = resultSet.getString("school_name");
                String sid = resultSet.getString("s_id");
                arrayList.add(sname);
                                System.out.println("this is stsement one"+sname);
                                //arrayList.add(number);

            }

                        resultSet2 = statement2.executeQuery(); 
                        while (resultSet2.next())
                        {
                                String user2 = resultSet2.getString("student_name");
                //int  number2 = resultSet2.getInt("s_id");
                                arrayList2.add(user2);
                                System.out.println("this is stsement two"+user2);
                        }
                      //  System.out.println(arrayList); 
                         resultSet3 = statement3.executeQuery(); 
                        while (resultSet3.next())
                        {
                                String user3 = resultSet3.getString("student_name");
                //int  number2 = resultSet2.getInt("s_id");
                                arrayList3.add(user3);
                                System.out.println("this is stsement three"+user3);
                        }
                        System.out.println("this is after statement 3 before 4");



        } 
                catch (Exception e2) 
                {
            e2.printStackTrace();
        } 





      //
    Iterator it = arrayList.iterator();
    while (it.hasNext()) 
    {
         store[i]= (String) it.next();
         i++; 
                 //System.out.println(it.next());
    }


    Iterator it2 = arrayList2.iterator();
    while (it2.hasNext()) 
    {
         store2[i1]= (String) it2.next();
         i1++;        
        //System.out.println(it.next());
    }

     Iterator it3 = arrayList3.iterator();
    while (it3.hasNext()) 
    {
         store3[i2]= (String) it3.next();
         i2++;        
       // System.out.println(it.next());
    }








    // ------------------------- Visible Settings start here --------------------//

     Object[] hierarchy ={"Click for schools",new Object[] {store[0],new Object[] { "Student Details",store2[0],store2[1] } },new Object[] { store[1],new Object[] { "Student Details",store3[0],store3[1]}}};
    DefaultMutableTreeNode root = processHierarchy(hierarchy);
    final JTree tree = new JTree(root);

   // setSize(275, 300);
    jp1.setSize(50,50);
    jp1.setBackground(Color.WHITE);
    jf1.setExtendedState(Frame.MAXIMIZED_BOTH);
    jf1.setLayout(new GridLayout(1,2));
    jf1.setVisible(true);
    jf1.add(new JScrollPane(tree), BorderLayout.WEST);
    jf1.add(jp1);
    jp1.setLayout(null);

  jl0.setBounds(10,1,500,100);  
  jp1.add(jl0);


 jl1.setBounds(55,90,150,100);   
 jt1.setBounds(225,130, 155, 25);

 jp1.add(jl1);
 jp1.add(jt1);

 jl2.setBounds(55,160, 150, 100);
 jt2.setBounds(225,200, 155, 25);

 jp1.add(jl2);
 jp1.add(jt2);

 jl3.setBounds(55,230,150,100);
 jt3.setBounds(225,270, 155, 25);

  jp1.add(jl3);
  jp1.add(jt3);

 jl4.setBounds(55,295, 150, 100);
 jt4.setBounds(225,330, 155, 25);

  jp1.add(jl4); 
  jp1.add(jt4);

  jb1.setEnabled(false);
  jb2.setEnabled(false);

 jb1.setBounds(150,430, 100, 50);
 jb2.setBounds(350,430, 100, 50);

  jp1.add(jb1);
  jp1.add(jb2);

  //-----------------Visible setting stop here--------------------------//

   //------------------- Element actions here------------------------//


    jt1.addFocusListener(new FocusListener() {

            @Override
            public void focusGained(FocusEvent e) 
            {
             jb1.setEnabled(true);
             jb2.setEnabled(true);    
            }

            @Override
            public void focusLost(FocusEvent e) 
            {
                jb1.setEnabled(false);
                jb2.setEnabled(false); 
            }
        });

    //now for the tree

    tree.addTreeSelectionListener(new TreeSelectionListener() {

            @Override
            public void valueChanged(TreeSelectionEvent e) {
                jf1.dispose();
                //jl0.setText("Displaying information About :  "+tree.getLastSelectedPathComponent().toString());
                store7[0]= tree.getLastSelectedPathComponent().toString(); 
                System.out.println("in store 7 of 0"+store7[0]);
                dbaction db = new dbaction(store7[0]);
            }
        }); 

   }
//------------------------------------end of action listening-------------------------

  private DefaultMutableTreeNode processHierarchy(Object[] hierarchy) 
  {
    DefaultMutableTreeNode node = new DefaultMutableTreeNode(hierarchy[0]);DefaultMutableTreeNode child;
    for(int i=1; i<hierarchy.length; i++) 
    {
      Object nodeSpecifier = hierarchy[i];
      if (nodeSpecifier instanceof Object[])  // Ie node with children
        child = processHierarchy((Object[])nodeSpecifier);
      else
        child = new DefaultMutableTreeNode(nodeSpecifier); // Ie Leaf
      node.add(child);
    }
    return(node);
  }

    private void close() 
    {
        try {
            if (resultSet != null) 
                        {
                resultSet.close();
            }
            if (statement != null) 
                        {
                //statement.
            }
            if (connect != null) 
                        {
                connect.close();
            }
        } 
        catch (Exception e3) 
                {
        e3.printStackTrace();
        }
    }
}

当然,dbaction.java 是我连接到数据库并获取详细信息的地方。

最佳答案

最好为树创建一个数据模型。 How to Use Trees教程有很好的例子。也通过Understanding the TreeModel了解更多详情。

顺便说一下,不要在Event Dispatch Thread 上执行长时间运行的任务,例如访问数据库。 .查看SwingWorker对于这样的任务。

关于java - 来自数据库的动态 Jtree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11515916/

相关文章:

java - 前端 Controller 设计模式和 MVC 设计模式有什么区别

java - TOMCAT 7,干净,干净的工作目录

java - 如何从 resultResult 中获取行数?

java - 在 Left Join 中找不到列

java - JDBC 返回空结果集,但记录存在于数据库中

Java - 通过鼠标拖动滚动图像

java - 如何使用java在文本文件中的特定列/索引上写入数据

java - 如何从 JList 获取索引 n 处的组件(不是数据)

java - 使按钮不可调整大小

java - GUI 未正确更新