elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Incluir Componente grafico en un JPanel
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Incluir Componente grafico en un JPanel  (Leído 4,367 veces)
Fran88

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Incluir Componente grafico en un JPanel
« en: 21 Agosto 2009, 19:45 pm »

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:
Código:

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 Desconectado

Mensajes: 16


Ver Perfil
Re: Incluir Componente grafico en un JPanel
« Respuesta #1 en: 21 Agosto 2009, 19:54 pm »

Se me olvidaba el codigo del paintComponent q tengo en la clase principal:
Código:
	/**
* 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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
recoger una referencia de JFrame de un JPanel
Java
joelmanx 0 2,775 Último mensaje 13 Enero 2011, 14:27 pm
por joelmanx
El JPanel pierde su contenido.
Java
NetJava 2 4,192 Último mensaje 14 Febrero 2011, 22:34 pm
por NetJava
Redimensionar tamaño JPanel dentro de otro JPanel [SOLUCIONADO]
Java
pisagatos 3 21,497 Último mensaje 11 Octubre 2012, 04:16 am
por Gianko
Cambiar titulo TitledBorder en JPanel
Java
monsefoster 2 27,965 Último mensaje 10 Abril 2011, 07:28 am
por monsefoster
Dimensiones reales de un componente gráfico (JFrame)
Java
K-YreX 2 2,138 Último mensaje 29 Abril 2020, 18:45 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines