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

如何使用java swing在jlist中的现有元素下添加新元素?,java,swing,jlist,mouseclick-event,Java,Swing,Jlist,Mouseclick Event,一、 我使用jlist显示我的数据库数据。该过程可以从数据库中获取数据并显示在jlist元素中。我需要通过单击事件在jlist元素下显示我的数据。示例:包含用户名的Jlist,单击特定用户后,它应在Jlist元素下方显示该用户的属性 如果有方法执行此过程,或者无法在特定jlist元素下显示,请建议我 提前感谢。您首先要做的事情之一始终是第一件事,因为他们通常不这样做,请举例说明如何做到这一点 因此,现在需要基于MouseEvent(或点)为元素创建索引。有趣的是,在浏览JListJavaDocs

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

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


提前感谢。

您首先要做的事情之一始终是第一件事,因为他们通常不这样做,请举例说明如何做到这一点

因此,现在需要基于
MouseEvent
(或
)为元素创建索引。有趣的是,在浏览
JList
JavaDocs时,我偶然发现了这个示例

 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);
好的,很好,我们知道
JList
中元素的索引,我们可以使用它来获取物理元素,您可以使用它来查询数据库、查找属性,或者,如果您已经正确地完成了操作并将一个实际对象嵌入到模型中,则可以获取属性

JList
/
ListModel
动态添加元素的唯一方法是通过可变的
ListModel
,如
DefaultListModel


话虽如此,
JTable
JTree
都将是显示复合信息的更好组件。

您首先要做的事情之一始终是第一件事,而且它们通常都有这样做的示例

因此,现在需要基于
MouseEvent
(或
)为元素创建索引。有趣的是,在浏览
JList
JavaDocs时,我偶然发现了这个示例

 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);
好的,很好,我们知道
JList
中元素的索引,我们可以使用它来获取物理元素,您可以使用它来查询数据库、查找属性,或者,如果您已经正确地完成了操作并将一个实际对象嵌入到模型中,则可以获取属性

将元素动态添加到
JList
/
ListModel
的唯一方法是通过可变的
ListModel
,如
DefaultListModel


综上所述,
JTable
JTree
都是显示复合信息的更好组件。

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


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


@这是使用
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;
    }
  }
}
导入java.awt.Component;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JScrollPane;
导入javax.swing.JTree;
导入javax.swing.event.TreeSelectionEvent;
导入javax.swing.event.TreeSelectionListener;
导入javax.swing.tree.DefaultMutableTreeNode;
导入javax.swing.tree.DefaultTreeCellRenderer;
导入javax.swing.tree.DefaultTreeModel;
公共类DatabaseTree实现TreeSelectionListener{
JFrame框架;
默认树模型树模型;
DefaultTreeCellRenderer-cellRenderer;
JScrollPane;
JTree树;
连接;
编制报表pst;
结果集rs;
List databaseNode=新建ArrayList();
公共数据库树(){
//JFrame.setDefaultLookAndFeelDecorated(true);
frame=新的JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode根=新的DefaultMutableTreeNode();
setUserObject(新的JLabel(“数据库”,新的ImageIcon(“/images/g.jpg”),JLabel.CENTER));
treeModel=新的DefaultTreeModel(根);
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
connection=DriverManager.getConnection(“jdbc:mysql://localhost:3306/ganesh“,”根“,
“行政管理”);
pst=connection.prepareStatement(“显示数据库”);
rs=pst.executeQuery();
while(rs.next()){
String text=rs.getString(1);
databaseNode.add(文本);
添加(新的DefaultMutableTreeNode(新的JLabel(文本,新的图像图标(“/images/g.jpg”),
JLabel.CENTER),;
}
}捕获(例外e){
e、 printStackTrace();
}
树=新的JTree(树模型);
setCellRenderer(新的MyTreeCellRenderer());
addTreeSelectionListener(这个);
tree.setRootVisible(true);
tree.expandRow(0);
窗格=新的JScrollPane(树);
frame.setContentPane(窗格);
frame.setVisible(true);
}
公共静态void main(字符串参数[]){
新建数据库树();
}
@凌驾
公共作废值已更改(TreeSelection事件e){
DefaultMutableTreeNode=(DefaultMutableTreeNode)e.getPath().getLastPathComponent();
字符串文本=((JLabel)node.getUserObject()).getText();
JLabel标签=null;
if(databaseNode.contains(text)){
if(node.getChildCount()==0){
试一试{
pst=connection.prepareStatement(“在“+文本中显示表格”);
rs=pst。
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;
    }
  }
}