Red de conocimiento informático - Aprendizaje de programación - Control de árbol de Java

Control de árbol de Java

Lo escribí y, si quieres, te lo puedo enviar y puedes contactarme en segundo plano. Para cumplir con las especificaciones de respuesta, tengo que publicar el código (porque solo hay un archivo en el espacio). ):

Paquete ui;

importar javax.swing.*;

importar Java.awt.*;

importar Java. awt.event.*;

importar Java.util.vector ;

La clase pública TreePanel extiende JPanel {

Vector privado <TreePanelNode>Node;

Vector privado <Integer>Nodo seleccionado;

p>

private int tmpX, tmpY

nodo de edición int privado =-1

int privado agregando padre =; -2;

privado int mouseX , mouseY

Público TreePanel () {

nodos = nuevo Vector & ltTreePanelNode & gt(); p>selectedNodes = nuevo Vector & ltInteger & gt() ;

setBackground(color.white);

addMouseListener(new MouseAdapter() {

public void mouse presionado (evento del mouse yo){

tmpX = me . getx();

tmpY = me gety();

if (nodes.size. () == 0) {

agregando padre =-1;

}

int I = 0;

for(; i<nodes.size();i++) {

if (nodes.get(i).getBounds().contains(mouseX,mouseY)) {

if (me.isControlDown( )) {

if (!selectedNodes.contains(i))

nodos seleccionados .add(I)

Otro

; nodos seleccionados .eliminar elemento(I);

} else if(! selectedNodes.contains(i)) {

selectedNodes = new Vector & ltinteger& gt();

nodos seleccionados add(I);

}

if (me.getClickCount() == 2) {

nodos.get(i).

setValue(" ");

nodo de edición = I;

}

Romper;

}

}

if (i == nodes.size())

if (!me.isControlDown())

selectedNodes = new Vector & ltInteger& gt( );

repintar();

}

mouse vacío público liberado (evento del mouse yo){

agregando padre = -2 ;

}

});

addMouseMotionListener(new MouseMotionAdapter() {

ratón vacío público arrastrado (evento del mouse yo){

mouseX = yo . getx();

mouseY = yo . (i<nodos seleccionados. tamaño(); i++) {

if(nodos. get(nodos seleccionados. get(I)).getBounds().contains(mouseX,mouseY))

Break;

}

if (yo ! = selectedNodes.size()) {

if(yo . isaltdown() & amp;& ampadding padre ! = -3) {

agregando padre = nodos seleccionados get(I);

}else {

for( I = 0;i<nodos seleccionados. size();i++) {

nodos.get(selectedNodes.get(i)). establecer ubicación(nodos .get(nodos seleccionados .get(I)). getLocation(). x + mouseX - tmpX,

nodes.get(selectedNodes.get()); /p>

tmpX = ratónX

tmpY = ratónY

}

}

repintar();

}

mouse del mouse vacío público (evento del mouse yo){

mouseX = yo . getx();

mouseY = yo . gety() ;

}

});

addkey oyente(nuevo adaptador de clave(){

clave pública vacía escrita (evento clave ke){

if (editingNode! = -1) {

if (ke.getKeyCode() == KeyEvent.VK_Enter)

nodo de edición =-1;

Otros

nodes.get (editar nodos). setValue(nodes.get(editingNode).getValue().

toString()+ke . getkey char());

} else if(ke . get key code()= = key event.VK_delete){

for(int I = 0; i & ltnodos seleccionados. tamaño(); i++)

nodos. eliminar(nodos seleccionados. get(I)); );

}

});

}

Pintura pública en blanco (gráfico g) {

super.paint(gram);

font metrics FM = g.getfont metrics();

if(agregar padre & gt;-2) {

string str = "nodo"+nodos .

int ancho = FM .

int altura = FM . >

TreePanelNode pnt = null

if (addingParent!= -1)

pnt = nodos get(agregando padre);

nodos .add. (nuevo TreePanelNode(pnt, mouseX-width/2-10, mouseY-height/2-20, width+20, height+40, str));

agregando padre =-3;

selectedNodes = new Vector & ltinteger& gt();

nodos seleccionados . add(nodes . size()-1);

}

for(int I = 0; i & ltnodes . size(); i++) {

String str = nodes.get(i). obtenerValor(). toString();

int ancho = FM. ancho de cadena(str);

int alto = FM getheight();

nodes.get(i. ). setSize(ancho + 20, alto + 40);

if (selectedNodes.contains(i))

g.setColor(color.red);

Otros

g.setColor(color.black);

if (nodes.get(i).getParent()!=null)

g.drawLine (nodos.get(i)). obtenerUbicación(). x+nodos.get(i). getWidth()/2,

nodos.get(i). obtenerUbicación(). y+nodos.get(i). getHeight()/2,

nodos.get(i). getParent(). obtenerUbicación(). x+nodos.get(i). getParent(). getWidth()/2,

nodos.get(i). getParent(). obtenerUbicación(). y+nodos.get(i). getParent().

getHeight()/2);

g.drawString(str, nodes.get(i)). obtenerUbicación(). x + 10, nodos.get(i). obtenerUbicación(). y+20);

g.drawRect(nodes.get(i)). obtenerUbicación(). x,nodos.get(i). obtenerUbicación(). y,nodos.get(i). getWidth(), nodos.get(i). getHeight());

}

agarrar foco();

}

}