- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 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/
我正在尝试动态使用 JTree 组件。在根节点下,我有四个节点,其中之一(“操作”)可以有 0 到多个子节点。这是由用户通过根据用户请求打开的单独窗口中的可编辑列表来设置的。编辑此列表后,用户点击“保
我阅读了很多有关此的主题,但仍然存在一些问题。我正在使用 NB 的 java 桌面项目。我已经从调色板创建了树,现在每次单击按钮后我想创建新树并刷新它。所以我在我想让新的 jTree 添加一些 Def
应用简单,一个框架中有两个面板 第一个面板,从数据库中检索所有学生,使用多个 hashmap 获取父子排列并将其显示在树上。 第二个面板,当您点击一个学生时,该学生的所有详细信息 (selection
我有两个 JTrees,里面有一些模拟数据,我想要做的是能够接受每个“工作”(15663-1、15663-2 等)并为每个创建一个节点,它下面的每个部分都有一个节点,以及连接到它下面每个部分的组件。在
当我在 JMenu 上单击鼠标时,它可以正常工作。 我将鼠标移开,它就消失了(正常)。然后我双击我的 JTree 中唯一的条目。 然后,当我单击我的 JMenu 时,它看起来像这样。它出现在 JTre
当我尝试动态更新我的 JTree 时,它工作得很好,但只显示我的新树。但后来我尝试将它添加到 JFrame - 什么也没有发生。 JTree 不更新。我不明白为什么。 public MainFor
我在名为 TreeFrame 的 JFrame 子类的构造函数中包含此代码。我想在 JTree 中显示 3 个级别,每个级别 10 个项目。为什么这会按预期工作: private DefaultTre
我目前在使用 JTree 的单元格编辑器时遇到问题。我的 JTree 中有两个不同的对象:Users 和 Books。 所以用户是 Bianca,书籍是节点。这些节点内的标签(眼睛、油漆标签和垃圾桶)
如何获得 JTree只听其TreeModel虽然它实际上对用户可见,或者至少让它在相应的 JFrame 后立即取消注册。被处置了吗? 据我所知,JTree 从其模型中取消注册的唯一情况是,如果您向它传
我在扩展 JTree 时遇到了奇怪的问题。我尝试将 JTree 添加到 JScrollPane。 树应该恢复到展开状态,但它不起作用 - 树已折叠。 代码如下: if (expansionSta
我想要发生的是在编辑 JTree 时,如果我在编辑框外单击,我想提交编辑。tree.setInvokesStopCellEditing(true); 有所帮助,如果我单击 JTree 中的某处,就会提
我有一个 JTree当用户将鼠标悬停在树节点上时,我想向用户显示一些描述。 我从文档中读到我们可以使用 MouseMotionListener为此。但是我怎样才能获得鼠标移动到的节点的值呢? 任何指针
我正在使用 JTree 并在此命名 JTree 节点 我正在使用右键单击(通过弹出窗口重命名)或 F2 键或双击。但问题是:当我重命名一个名称并按下 Enter 键时,节点成功重命名,当我重命名一个名
我正在使用 Netbeans 在 JAVA 中开发一个小型桌面应用程序。我放置了一个 JTree 并动态填充它。现在一切顺利,我想实现以下两件事: 当填充 JTree 时,它会自动展开它将开始显示
我创建了一个树单元渲染器/编辑器框架,诚然有点老套,但它在 Windows 和 Linux 上运行得很好。下图展示了一个示例设置。 目标是,如果用户单击图像(数字)1 或 2,则应用程序会响应该单击,
我有两个关于 Icons 的问题。 我使用 ImageIcons 作为 JTree 上的默认图标。按照教程的建议,我使用此方法加载图标: protected ImageIcon createImage
我目前正在使用 JTree,更准确地说是使用 CheckBoxTree,这是一个由 JIDE 创建的继承类。我需要找到一种重置树的方法,意思是: 清除选择 删除节点 我尝试取消设置 Tree 变量、t
假设我的 JTree 由以下节点组成。 new DefaultMutableTreeNode("DisplayThisTextOnly {donotdisplaystringsinhere}"); 如
双击时,我将双击的 Jtree 节点的背景突出显示为绿色。当我双击其他节点时,之前选择的绿色节点应该恢复到原来的状态,并且新双击的节点应该亮起绿色。 它在某种程度上起作用,但行为不一致。当我双击子节点
我有这个 Jtree,我必须在我的 tbltables 表中插入“表”。 (我的意思是我的 MSQL 数据库中有一个名为 tbltables 的表,其中有一个表列表)。 所以这些表中也可以有表。所以现
我是一名优秀的程序员,十分优秀!