java树型布局
当前位置:以往代写 > JAVA 教程 >java树型布局
2019-06-14

java树型布局

java树型布局

利用一个JTree可以简朴地像下面这样暗示:
add(new JTree(
new Object[] {"this", "that", "other"}));
这个措施显示了一个原始的树状物。树状物的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(默认)”字样,我们可以代替我们本身的类来获取差异的行动。但请留意:险些所有这些类都有一个具大的接口,因此我们可以花一些时间尽力去领略这些错综巨大的树状物。

    关键字:

在线提交作业