下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

java中的树状物的API是非常巨大的

作者:课课家教育     来源: http://www.kokojia.com点击数:733发布时间: 2016-02-22 13:51:36

标签: java的程序java的树状物类java的模型

大神带你学编程,欢迎选课

  使用一个JTree可以简单地像下面这样表示:

  add(new JTree(

  new Object[] {"this", "that", "other"}));

java中的树状物的API是非常巨大的_java的程序_java的树状物类_课课家

  这个程序显示了一个原始的树状物。树状物的API是非常巨大的,可是——当然是在Swing中的巨大。它表明我们可以做有关树状物的任何事,但更复杂的任务可能需要不少的研究和试验。幸运的是,在库中提供了一个妥协:“默认的”树状物组件,通常那是我们所需要的。因此大多数的时间我们可以利用这些组件,并且只在特殊的情况下我们需要更深入的研究和理解。

  下面的例子使用了“默认”的树状物组件在一个程序片中显示一个树状物。当我们按下按钮时,一个新的子树就被增加到当前选中的结点下(如果没有结点被选中,就用根结节):

  //: Trees.java

  // Simple Swing tree example. Trees can be made

  // vastly more complex than this.

  package c13.swing;

  import java.awt.*;

  import java.awt.event.*;

  import javax.swing.*;

  import javax.swing.tree.*;

  // Takes an array of Strings and makes the first

  // element a node and the rest leaves:

  class Branch {

  DefaultMutableTreeNode r;

  public Branch(String[] data) {

  r = new DefaultMutableTreeNode(data[0]);

  for(int i = 1; i < data.length; i++)

  r.add(new DefaultMutableTreeNode(data[i]));

  }

  public DefaultMutableTreeNode node() {

  return r;

  }

  }

  public class Trees extends JPanel {

  String[][] data = {

  { "Colors", "Red", "Blue", "Green" },

  { "Flavors", "Tart", "Sweet", "Bland" },

  { "Length", "Short", "Medium", "Long" },

  { "Volume", "High", "Medium", "Low" },

  { "Temperature", "High", "Medium", "Low" },

  { "Intensity", "High", "Medium", "Low" },

  };

  static int i = 0;

  DefaultMutableTreeNode root, child, chosen;

  JTree tree;

  DefaultTreeModel model;

  public Trees() {

  sETLayout(new BorderLayout());

  root = new DefaultMutableTreeNode("root");

  tree = new JTree(root);

  // Add it and make it take care of scrolling:

  add(new JScrollPane(tree),

  BorderLayout.CENTER);

  // Capture the tree's model:

  model =(DefaultTreeModel)tree.getModel();

  JButton test = new JButton("Press me");

  test.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent e){

  if(i < data.length) {

  child = new Branch(data[i++]).node();

  // What's the last one you clicked?

  chosen = (DefaultMutableTreeNode)

  tree.getLastSelectedPathComponent();

  if(chosen == null) chosen = root;

  // The model will create the

  // appropriate event. In response, the

  // tree will update itself:

  model.insertNodeInto(child, chosen, 0);

  // This puts the new node on the

  // currently chosen node.

  }

  }

  });

  // Change the button's colors:

  test.setBackground(Color.blue);

  test.setForeground(Color.white);

  JPanel p = new JPanel();

  p.add(test);

  add(p, BorderLayout.SOUTH);

  }

  public static void main(String args[]) {

  Show.inFrame(new Trees(),200,500);

  }

  } ///:~

  最重要的类就是分支,它是一个工具,用来获取一个字符串数组并为第一个字符串建立一个DefaultMutableTreeNode作为根,其余在数组中的字符串作为叶。然后node()方法被调用以产生“分支”的根。树状物类包括一个来自被制造的分支的二维字符串数组,以及用来统计数组的一个静态中断i。DefaultMutableTreeNode对象控制这个结节,但在屏幕上表示的是被JTree和它的相关(DefaultTreeModel)模式所控制。注意当JTree被增加到程序片时,它被封装到JScrollPane中——这就是它全部提供的自动滚动。

  JTree通过它自己的模型来控制。当我们修改这个模型时,模型产生一个事件,导致JTree对可以看见的树状物完成任何必要的升级。在init()中,模型由调用getModel()方法所捕捉。当按钮被按下时,一个新的分支被创建了。然后,当前选择的组件被找到(如果没有选择就是根)并且模型的insertNodeInto()方法做所有的改变树状物和导致它升级的工作。

  大多数的时候,就像上面的例子一样,程序将给我们在树状物中所需要的一切。不过,树状物拥有力量去做我们能够想像到的任何事——在上面的例子中我们到处都可看到“default(默认)”字样,我们可以取代我们自己的类来获取不同的动作。但请注意:几乎所有这些类都有一个具大的接口,因此我们可以花一些时间努力去理解这些错综复杂的树状物。

赞(22)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程