Autor
|
Tema: Incluir Componente grafico en un JPanel (Leído 4,483 veces)
|
Fran88
Desconectado
Mensajes: 16
|
Buenas!, Estaba probando swing, y he creado en una clase, una pequeña "applet" que contiene nombre,texto y atributos, es un panel enanisimo y lo he pensado para dibujar un panelito de estos por cada Nodo de un arbol que voy a pintar. El problema q tengo esq no he usado swing en mi vida y he estado mirando pero pierdo muxisimo tiempo y doy palos de ciego. El codigo de mi clase NodoGrafico es este: import java.awt.Dimension; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JEditorPane;
import javax.swing.WindowConstants; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.ListModel;
/** * This code was edited or generated using CloudGarden's Jigloo * SWT/Swing GUI Builder, which is free for non-commercial * use. If Jigloo is being used commercially (ie, by a corporation, * company or business for any purpose whatever) then you * should purchase a license for each developer using Jigloo. * Please visit www.cloudgarden.com for details. * Use of Jigloo implies acceptance of these licensing terms. * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE. */ public class NodoGrafico extends javax.swing.JPanel { private JEditorPane jEditorPane1; private JEditorPane jEditorPane2; private JButton jButton1; private JScrollPane jScrollPane1; private JList jList1; private JButton jButton3; private JButton jButton2;
/** * Auto-generated main method to display this * JPanel inside a new JFrame. */ /**public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new NodoGrafico()); frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame.pack(); frame.setVisible(true); }*/ public NodoGrafico() { super(); initGUI(); } public void initGUI() { try { setPreferredSize(new Dimension(100,150)); { jButton1 = new JButton(); this.add(jButton1); jButton1.setText("Nom:"); } { jEditorPane1 = new JEditorPane(); this.add(getJEditorPane1()); jEditorPane1.setText("nomb"); } { jButton2 = new JButton(); this.add(getJButton2()); jButton2.setText("Text:"); } { jEditorPane2 = new JEditorPane(); this.add(jEditorPane2); jEditorPane2.setText("txt"); } { jButton3 = new JButton(); this.add(getJButton3()); jButton3.setText("Atribs:"); } { jScrollPane1 = new JScrollPane(); this.add(jScrollPane1); jScrollPane1.setPreferredSize(new java.awt.Dimension(98, 36)); { ListModel jList1Model = new DefaultComboBoxModel( new String[] { "Item One", "Item Two" }); jList1 = new JList(); jScrollPane1.setViewportView(jList1); jList1.setModel(jList1Model); jList1.setPreferredSize(new java.awt.Dimension(67, 36)); } }
} catch (Exception e) { e.printStackTrace(); } } public JEditorPane getJEditorPane1() { return jEditorPane1; } public JButton getJButton1() { return jButton1; } public JButton getJButton2() { return jButton2; } public JButton getJButton3() { return jButton3; } public JList getJList1() { return jList1; }
}
Tengo la clase principal q ya me dibuja un arbol, pero digamos q donde dibuja un rectangulo con "nombre" quiero sustituirlo por esa pequeña clase q os acabo de poner... Yo estoy desesperado si alguien pudiera responderme lo agradeceria.
|
|
|
En línea
|
|
|
|
Fran88
Desconectado
Mensajes: 16
|
Se me olvidaba el codigo del paintComponent q tengo en la clase principal: /** * Dibuja el árbol correspondiente */ protected void paintComponent(Graphics g){ super.paintComponent(g); //la altura indica en cuanto debemos dividir la pantalla ( eje Y ) int altura=calcAltura(arbol, arbol.root()); //dibujamos cada nivel for (int i=1; i<=altura; i++){ //obtenemos todos los nodos del nivel i y los guardamos en una lista //Cogemos la lista de hijos PositionList<Position<NodoXML>> lista=obtenerPosicionesNivel(i, arbol); int nodosNivel=lista.size()+1; int x=this.getWidth()/nodosNivel; //la altura Y se obtiene multiplicando el espacio asignado a cada nivel (alto total de la pantalla dividido numero de niveles) //por el nivel actual menos 1, para que la raiz nos quede bien arriba. int y=(i-1)*this.getHeight()/altura; int hijosagregados=0; int hijospadre=0; for (Position<NodoXML> p: lista){ //hay que dividir entre caso especial (nodo raiz) y caso normal if (arbol.isRoot(p)){ y+=20; //guardamos los valores de la ubicacion del nodo p.element().setX(x); p.element().setY(y); //pintamos el nodo // AQUI INCLUIRIAMOS EL COMPONENTE DEL NODO GRAFICO DE LA OTRA CLASE g.drawRect(x, y, p.element().getNombre().length(), 20); //pintamos los detalles del nodo g.drawString("Nom:"+p.element().getNombre(), p.element().getX()+2, y+13); } //caso normal else{ //calculamos estos valores auxiliares para el resto de las cuentas. //hijospadre=arbol.parent(p).element().getChildren().size(); hijospadre=((NodePositionList<Position<NodoXML>>) arbol.children(arbol.parent(p))).size(); int mitad=hijospadre/2; int difx=0; //calculamos el diferencial de x, es decir, negativo si estamos insertando a izquierda if (hijosagregados<mitad) difx=-1; //positivo si estamos agregando a derecha else difx=1; //a la posicion del padre en x se le suma (o resta) un valor, resultado de: //se multiplica el x del padre por 2, definiendo asi el espacio total para los hijos, que luego se divide //entre los nodos del nivel, obteniendo asi la distancia entre nodos. Eso se multiplica por el valor absoluto //de la resta mitad-hijosagregados, que señala que nodo estamos agregando y en que posicion debe ir: //nos dira si es el nodo que esta justo a la mitad (0), si es el primero entre varios(mitad-0) o si es el ultimo entre varios. //todo eso multiplicado por difx que indica hacia que lado se agrega(izquierda o derecha, - o +); int saved=arbol.parent(p).element().getX()+(difx*arbol.parent(p).element().getX()*2/nodosNivel*(Math.abs(mitad-hijosagregados))); //dibujamos los nodos g.drawRect(saved, y, p.element().getNombre().length()+2, 15); g.drawLine(saved+p.element().getNombre().length()/2, y, arbol.parent(p).element().getX()+arbol.parent(p).element().getNombre().length()/2, arbol.parent(p).element().getY()+15); g.drawString("Nom:"+p.element().getNombre(), p.element().getX()+2, y+13); //guardamos los valores de este nodo p.element().setY(y); p.element().setX(saved); //verificamos si ya agregamos todos los hijos de un padre //(notar que la lista de nodos los ordena de forma que todos los hijos de un mismo ancestro esten juntos) if (hijosagregados<hijospadre) hijosagregados++; else hijosagregados=0; } } } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
recoger una referencia de JFrame de un JPanel
Java
|
joelmanx
|
0
|
2,950
|
13 Enero 2011, 14:27 pm
por joelmanx
|
|
|
El JPanel pierde su contenido.
Java
|
NetJava
|
2
|
4,449
|
14 Febrero 2011, 22:34 pm
por NetJava
|
|
|
Redimensionar tamaño JPanel dentro de otro JPanel [SOLUCIONADO]
Java
|
pisagatos
|
3
|
21,973
|
11 Octubre 2012, 04:16 am
por Gianko
|
|
|
Cambiar titulo TitledBorder en JPanel
Java
|
monsefoster
|
2
|
28,543
|
10 Abril 2011, 07:28 am
por monsefoster
|
|
|
Dimensiones reales de un componente gráfico (JFrame)
Java
|
K-YreX
|
2
|
2,371
|
29 Abril 2020, 18:45 pm
por K-YreX
|
|