在第二个Java类文件中的一个Java类文件中设置JTree-Swing [英] Set JTree in one java class file from second java class file - Swing

查看:43
本文介绍了在第二个Java类文件中的一个Java类文件中设置JTree-Swing的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在同一程序包1下有两个java类.mrbpdf.java和FileTreeDemo.java,我想将JTree功能从FileTreeDemo.java设置为mrbpdf.java JTree,因为我是新手!很难做到.请给我指示,谢谢,如果我的问题不清楚,请对其进行评论,并将对此进行相应的更改.

I have two java class under same package 1. mrbpdf.java and FileTreeDemo.java, I want set the JTree functionalities from FileTreeDemo.java to mrbpdf.java JTree, since I am newbie! finding difficulties to do it. Please give me directions, thanks, if my question is unclear please comment it, will change it accordingly.

基本上我想在mrbpdf.java中显示根文件目录(例如c:/);

Basically I want show the root (for example c:/ ) file directory in mrbpdf.java;

mrbpdf.java

mrbpdf.java

public class mrbpdf {

private JFrame frmViperManufacturingRecord;
private JTextField txtText; //declearing here for global variable

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                mrbpdf window = new mrbpdf();
                window.frmViperManufacturingRecord.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });


}

/**
 * Create the application.
 */
public mrbpdf() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
public void initialize() {
    frmViperManufacturingRecord = new JFrame();
    frmViperManufacturingRecord.setBackground(Color.GRAY);
    frmViperManufacturingRecord.setTitle("Manufacturing Record Book");
    frmViperManufacturingRecord.setBounds(100, 100, 1026, 702);
    frmViperManufacturingRecord.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmViperManufacturingRecord.getContentPane().setLayout(null);

    JButton btnGeneratePdfHeader = new JButton("Generate PDF Header");
    btnGeneratePdfHeader.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            //JOptionPane.showMessageDialog(null, "Welcome to viper");
            txtText.setText("Hi User....");
        }
    });
    btnGeneratePdfHeader.setFont(new Font("Calibri", Font.BOLD, 12));
    btnGeneratePdfHeader.setBounds(786, 183, 156, 23);
    frmViperManufacturingRecord.getContentPane().add(btnGeneratePdfHeader);

    txtText = new JTextField();
    txtText.setText("text1");
    txtText.setBounds(678, 182, 98, 23);
    frmViperManufacturingRecord.getContentPane().add(txtText);
    txtText.setColumns(10);


    JTree tree = new JTree();
    tree.setBounds(10, 11, 304, 624);
    //tree.setModel("FileTreeDemo");
    JScrollPane scrollpane = new JScrollPane(tree);


    frmViperManufacturingRecord.getContentPane().add(tree);
}
}

FileTreeDemo.java

FileTreeDemo.java

public class FileTreeDemo {
  public static void main(String[] args) {
    File root;
    if (args.length > 0) root = new File(args[0]);
    else root = new File(System.getProperty("user.home"));

    FileTreeModel model = new FileTreeModel(root);

JTree tree = new JTree();
tree.setModel(model);

// The JTree can get big, so allow it to scroll.
JScrollPane scrollpane = new JScrollPane(tree);

// Display it all in a window and make the window appear
JFrame frame = new JFrame("FileTreeDemo");
frame.getContentPane().add(scrollpane, "Center");
frame.setSize(400,600);
frame.setVisible(true);
  }
}

class FileTreeModel implements TreeModel {
  // We specify the root directory when we create the model.
  protected File root;
   public FileTreeModel(File root) { this.root = root; }

  // The model knows how to return the root object of the tree
  public Object getRoot() { return root; }

 // Tell JTree whether an object in the tree is a leaf or not
 public boolean isLeaf(Object node) {  return ((File)node).isFile(); }

 // Tell JTree how many children a node has
 public int getChildCount(Object parent) {
   String[] children = ((File)parent).list();
   if (children == null) return 0;
   return children.length;
  }

  public Object getChild(Object parent, int index) {
     String[] children = ((File)parent).list();
     if ((children == null) || (index >= children.length)) return null;
     return new File((File) parent, children[index]);
   }

   public int getIndexOfChild(Object parent, Object child) {
     String[] children = ((File)parent).list();
     if (children == null) return -1;
     String childname = ((File)child).getName();
    for(int i = 0; i < children.length; i++) {
     if (childname.equals(children[i])) return i;
    }
   return -1;
  }

  public void valueForPathChanged(TreePath path, Object newvalue) {}

   public void addTreeModelListener(TreeModelListener l) {}
   public void removeTreeModelListener(TreeModelListener l) {}
 }

推荐答案

如果要在mrbpdf类中使用FileTreeModel树模型,则可以在mrbpdf.initialize方法中使用以下代码:

If you want to use the FileTreeModel tree model in the mrbpdf class, you can use this code in the mrbpdf.initialize method:

//JTree tree = new JTree();

File root = new File(System.getProperty("user.home"));
FileTreeModel model = new FileTreeModel(root);
JTree tree = new JTree(model);

同样要添加滚动,此代码可以为您提供帮助(采用与上述相同的方法):

To add scrolling as well, this code could help you (in the same method as above):

//tree.setBounds(10, 11, 304, 624);
JScrollPane scrollpane = new JScrollPane(tree);
scrollpane.setBounds(10, 11, 304, 624);

//frmViperManufacturingRecord.getContentPane().add(tree);
frmViperManufacturingRecord.getContentPane().add(scrollpane);


编辑-要支持多个根,您可以使用其他树模型,例如:


Edit - to support multiple roots, you could use a different tree model, like for example:

class MultipleDirectoriesTreeModel implements TreeModel {
    protected List<File> roots;

    public MultipleDirectoriesTreeModel(File... roots) {
        this.roots = Arrays.asList(roots);
    }

    public Object getRoot() { return this; }

    public boolean isLeaf(Object node) {
        return node instanceof File && ((File)node).isFile();
    }

    public int getChildCount(Object parent) {
        if (parent == this)
            return roots.size();
        else {
            String[] children = ((File) parent).list();
            if (children == null)
                return 0;
            return children.length;
        }
    }

    public Object getChild(Object parent, int index) {
        if (parent == this)
            return index >= 0 && index < roots.size() ? roots.get(index) : null;
        else {
            String[] children = ((File) parent).list();
            if ((children == null) || (index >= children.length))
                return null;
            return new File((File) parent, children[index]);
        }
    }

    public int getIndexOfChild(Object parent, Object child) {
        String childname = ((File) child).getName();
        if (parent == this) {
            for (int rootIndex = 0; rootIndex < roots.size(); rootIndex++)
                if (childname.equals(roots.get(rootIndex).getName()))
                    return rootIndex;
            return -1;
        } else {
            String[] children = ((File) parent).list();
            if (children == null)
                return -1;
            for (int i = 0; i < children.length; i++) {
                if (childname.equals(children[i]))
                    return i;
            }
            return -1;
        }
    }

    @Override
    public String toString() {
        return "My Computer";
    }

    public void valueForPathChanged(TreePath path, Object newvalue) {}
    public void addTreeModelListener(TreeModelListener l) {}
    public void removeTreeModelListener(TreeModelListener l) {}
}

此树模型可以这样初始化:

This tree model could be initialized like this:

MultipleDirectoriesTreeModel model
    = new MultipleDirectoriesTreeModel(new File("C:\\"), new File("D:\\"));

这篇关于在第二个Java类文件中的一个Java类文件中设置JTree-Swing的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆