当前位置: 首页 > 知识库问答 >
问题:

如何使用java swing在jlist中的现有元素下添加新元素?

贾兴学
2023-03-14

一、 我使用jlist来显示我的数据库数据。这个过程可以很好地从数据库中获取数据并显示在jlist元素中。我需要通过单击事件在jlist元素下显示我的数据。示例:包含用户名的Jlist,单击特定用户后,它应在Jlist元素下方显示该用户的属性。

如果有方法执行此过程,或者无法在特定jlist元素下显示,请建议我。

提前谢谢。

共有3个答案

徐阳炎
2023-03-14

这是动态树的工作示例,它将数据库作为节点加载,将其表作为子节点加载。首先,您必须创建一个根节点节点,其中包含数据库的所有节点,然后在隐藏根节点之后,这会让您感觉到数据库列表。之后,当我们单击任何数据库节点时,它会在树中动态加载其表(注意:它只在单击数据库节点时加载表)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class DatabaseTree implements TreeSelectionListener {

  JFrame frame;
  DefaultTreeModel treeModel;
  DefaultTreeCellRenderer cellRenderer;
  JScrollPane pane;
  JTree tree;
  Connection connection;
  PreparedStatement pst;
  ResultSet rs;
  List<String> databaseNode = new ArrayList<String>();

  public DatabaseTree() {
    // JFrame.setDefaultLookAndFeelDecorated(true);
    frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    DefaultMutableTreeNode root = new DefaultMutableTreeNode();
    root.setUserObject("Database");
    treeModel = new DefaultTreeModel(root);
    try {
      Class.forName("com.mysql.jdbc.Driver");
      connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ganesh", "root",
          "admina");
      pst = connection.prepareStatement("show databases");
      rs = pst.executeQuery();
      while (rs.next()) {
        String text = rs.getString(1);
        databaseNode.add(text);
        root.add(new DefaultMutableTreeNode(text));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    tree = new JTree(treeModel);
    tree.addTreeSelectionListener(this);
    tree.setRootVisible(false);
    tree.expandRow(0);
    pane = new JScrollPane(tree);
    frame.getContentPane().add(pane);
    frame.setVisible(true);
    frame.pack();
  }

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

  @Override
  public void valueChanged(TreeSelectionEvent e) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.getPath().getLastPathComponent();
    String text = (String) node.getUserObject();
    if (databaseNode.contains(text)) {
      if (node.getChildCount() == 0) {
        try {
          pst = connection.prepareStatement("show tables in " + text);
          rs = pst.executeQuery();
          while (rs.next()) {
            String data = rs.getString(1);
            node.add(new DefaultMutableTreeNode(data));
          }
        } catch (Exception ee) {
          ee.printStackTrace();
        }
      }
    }
  }
}

更新了树节点上的点击事件,您必须在其上添加鼠标侦听器

 tree.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        TreePath treePath = tree.getPathForLocation(e.getX(), e.getY());
        if (treePath != null)
          String text = ((DefaultMutableTreeNode)treePath.getLastPathComponent()).getUserObject();
          txtField.setText(text);
            else
         txtField.setText("");
      }
    });
  }
司徒俊良
2023-03-14

@Arunachalam这是使用DefaultTreeCellRenderer包含图像的树节点示例。

import java.awt.Component;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;

public class DatabaseTree implements TreeSelectionListener {

  JFrame frame;
  DefaultTreeModel treeModel;
  DefaultTreeCellRenderer cellRenderer;
  JScrollPane pane;
  JTree tree;
  Connection connection;
  PreparedStatement pst;
  ResultSet rs;
  List<String> databaseNode = new ArrayList<String>();

  public DatabaseTree() {
    // JFrame.setDefaultLookAndFeelDecorated(true);
    frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    DefaultMutableTreeNode root = new DefaultMutableTreeNode();
    root.setUserObject(new JLabel("Databases", new ImageIcon("/images/g.jpg"), JLabel.CENTER));
    treeModel = new DefaultTreeModel(root);
    try {
      Class.forName("com.mysql.jdbc.Driver");
      connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ganesh", "root",
          "admina");
      pst = connection.prepareStatement("show databases");
      rs = pst.executeQuery();
      while (rs.next()) {
        String text = rs.getString(1);
        databaseNode.add(text);
        root.add(new DefaultMutableTreeNode(new JLabel(text, new ImageIcon("/images/g.jpg"),
            JLabel.CENTER)));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    tree = new JTree(treeModel);
    tree.setCellRenderer(new MyTreeCellRenderer());
    tree.addTreeSelectionListener(this);
    tree.setRootVisible(true);
    tree.expandRow(0);
    pane = new JScrollPane(tree);
    frame.setContentPane(pane);
    frame.setVisible(true);

  }

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

  @Override
  public void valueChanged(TreeSelectionEvent e) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.getPath().getLastPathComponent();
    String text = ((JLabel) node.getUserObject()).getText();
    JLabel label = null;
    if (databaseNode.contains(text)) {
      if (node.getChildCount() == 0) {
        try {
          pst = connection.prepareStatement("show tables in " + text);
          rs = pst.executeQuery();
          while (rs.next()) {
            String data = rs.getString(1);
            label = new JLabel(data);
            node.add(new DefaultMutableTreeNode(label));
          }
        } catch (Exception ee) {
          ee.printStackTrace();
        }
      }
    }
  }

  class MyTreeCellRenderer extends DefaultTreeCellRenderer {

    JLabel label;

    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
                                                  boolean expanded, boolean leaf, int row,
                                                  boolean hasFocus) {

      DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
      label = (JLabel) node.getUserObject();

      if (selected) {
        label.setBackground(backgroundSelectionColor);
        label.setForeground(textSelectionColor);
      } else {
        label.setBackground(backgroundNonSelectionColor);
        label.setForeground(textNonSelectionColor);
      }
      return label;
    }
  }
}
羊慈
2023-03-14
 MouseListener mouseListener = new MouseAdapter() {
     public void mouseClicked(MouseEvent e) {
         if (e.getClickCount() == 2) {
             int index = list.locationToIndex(e.getPoint());
             System.out.println("Double clicked on Item " + index);
          }
     }
 };
 list.addMouseListener(mouseListener);
 类似资料:
  • 问题内容: 我有一个单击按钮时执行的功能。假设有一个循环将1到10加到。我将该数据添加到中。它完美地工作,并且数字相加。然后我在循环中添加了一个。但是输出是不同的。我想每秒增加1个元素。但是现在它等待10秒,并在第10秒结束时将所有1到10加在一起。我在哪里错了? 问题答案: 您应该在单独的线程中更新列表,否则最终将阻塞事件分发线程。 请尝试以下操作:

  • 问题内容: 我正在尝试创建一个简单的程序来管理员工。尝试添加新员工时,我似乎无法让该员工显示在Jlist上。 主机… 添加员工的对话… 这就是我用来添加员工的方法 我认为这是正确的方法,但似乎无效。任何帮助将不胜感激。 问题答案: 有两个问题, 第一个: 不好:。使用equals(…)或equalsIgnoreCase(…)。理解检查是否绝对不是您感兴趣的 引用 相等性。您需要 函数 相等性,这是

  • 问题内容: 我有办法 在内部,我想调用另一个方法并将其传递,但是我想向其他对象添加新元素(描述)。 如何在Java中做到这一点?代码是什么样的? 问题答案: 只是一个数组。因此: 您可能需要弄混的通用类型。 您可以更快但更冗长:

  • 我目前正在创建一个购物车模拟程序。主GUI包含两个列表,一个是产品列表或库存。(存储在. dat文件中的产品在启动时自动加载)另一个是空白的,是对我的购物篮进行建模。这个想法是能够将我的库存中的物品扫描到结账篮中。当这发生时,我想要一个我创建的文本字段,以动态更新篮子中所有物品的成本。 下面是我的扫描按钮的方法,它应该执行上述操作: 然而,目前扫描该项目会将其添加到列表中,但总的来说会打印奇怪的结

  • 问题内容: 我们无法对从.. 获得的集合执行或操作,仅允许进行remove操作。 因此,如果遇到需要在其中添加新元素而不删除其中的先前元素的情况,该怎么办?我该如何实现? 问题答案: 使用构造函数创建一个新的:

  • 本文向大家介绍如何使用jQuery在HTML元素中添加display:none?,包括了如何使用jQuery在HTML元素中添加display:none?的使用技巧和注意事项,需要的朋友参考一下 要解决显示问题:在jQuery元素中没有显示方法,请使用方法。它将执行相同的工作。 示例 您可以尝试运行以下代码以了解如何在HTML元素中添加display:none-