Заполнение JTree - PullRequest
       19

Заполнение JTree

4 голосов
/ 15 октября 2011

У меня есть массив объектов класса A, который содержит массив объектов класса B. У меня довольно много вопросов: (Примеры кодирования очень помогли бы)

  1. Как я могу использовать JTree с родительским узлом в качестве объекта A и дочерним узлом как B и заполнить его?
  2. Предполагая, что весь JFrame разделен на две панели (одна из которых содержит JTree идругой JPanel, который отображает атрибуты объекта, соответствующие опции, выбранной в JTree), как я могу это сделать?На данный момент я могу жестко закодировать значения в JTree.

Я искал лот для примеров в сети, но смогнайти только основные примеры.

Это то, что я сделал до сих пор:

public class A {
int a1=10;
int a2=20;
B bobj[]=new B[2];
A(){
   bobj[0]=new B();
   bobj[1]=new B();
}
}

class B {
int b=30;
}

В моем коде Jtree:

import javax.swing.tree.TreeModel;

public class try1 extends javax.swing.JFrame {
 static A a2=new A();
/** Creates new form try1 */
public try1() {
    initComponents();
}

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    Tree = new javax.swing.JTree();
    jPanel1 = new javax.swing.JPanel();
    jPanel2 = new javax.swing.JPanel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    Tree.setModel(a2);
    Tree.setAutoscrolls(true);
    Tree.setRootVisible(true);
    jScrollPane1.setViewportView(Tree);
    Tree.getAccessibleContext().setAccessibleName("");
    Tree.getAccessibleContext().setAccessibleDescription("");

    jPanel1.setBackground(new java.awt.Color(254, 254, 254));

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 655, Short.MAX_VALUE)
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 569, Short.MAX_VALUE)
    );

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
    jPanel2.setLayout(jPanel2Layout);
    jPanel2Layout.setHorizontalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 463, Short.MAX_VALUE)
    );
    jPanel2Layout.setVerticalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 151, Short.MAX_VALUE)
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 236, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(21, 21, 21))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(473, Short.MAX_VALUE))
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addContainerGap(43, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 569, Short.MAX_VALUE))
            .addContainerGap(24, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
    a2=new A();
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
           new try1().setVisible(true);
        }
    });
}

// Variables declaration - do not modify
public javax.swing.JTree Tree;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration

}

Я нашел этот пример здесь 1. Поскольку исходный формат eg - это массив строк, они используют hastable.Так как я использую класс объектов (A), который содержит объекты B, как я должен это сделать (я получаю ошибку выше).2. Я прикрепил макет моей рамки.Я жестко закодировал Jtree на скриншоте.Что я должен сделать, чтобы, если я нажму на какой-либо узел Jtree, я смог просмотреть информацию о J enter image description here TextField рядом с ним?

1 Ответ

3 голосов
/ 15 октября 2011

Исходя из фрагмента и изображения вашей программы, вы можете начать с изучения TreeDemo примера, рассмотренного в Как использовать деревья . Соответствующие примеры можно найти здесь .

...