|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
[java - awt] facile o difficile?
Codice:
private class DrawingPanel extends JPanel
{
private int fromLeftMargin = 2;
private Graphics graphics;
//private int hScale = 40;
private int vScale = 40;
DrawingTree build(AVLNode t, int level)
{
if(t.isEmpty()) return null;
else
{
DrawingTree left = build(t.left, level + 1);
String str = t.element.toString() + "|" + t.height;
Rectangle2D rect = graphics.getFontMetrics().getStringBounds(str, graphics);
int width = (int)Math.round(rect.getWidth())+2;
int height = (int)Math.round(rect.getHeight());
int dx = (int)Math.round(rect.getCenterX());
int dy = (int)Math.round(rect.getCenterY());
int x = fromLeftMargin + dx + 2;
int y = vScale*level + dy;
fromLeftMargin += width;
DrawingTree right = build(t.right, level + 1);
return new DrawingTree(t.element, x, y, width, height, left, right, t.height);
}
}
void draw(DrawingTree dt)
{
if(dt != null)
{
String str = dt.element.toString() + "|" + dt.nodeHeight;
graphics.drawRect(dt.x, dt.y, dt.width, dt.height);
graphics.drawString(str, dt.x+1, dt.y + dt.height - 2);
if(dt.left != null)
{
int x1 = dt.x + dt.width/2;
int y1 = dt.y + dt.height;
int x2 = dt.left.x + dt.left.width/2;
int y2 = dt.left.y;
graphics.drawLine(x1, y1, x2, y2);
}
draw(dt.left);
if(dt.right != null)
{
int x1 = dt.x + dt.width/2;
int y1 = dt.y + dt.height;
int x2 = dt.right.x + dt.right.width/2;
int y2 = dt.right.y;
graphics.drawLine(x1, y1, x2, y2);
}
draw(dt.right);
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
graphics = g;
DrawingTree dt = build(root,1);
draw(dt);
fromLeftMargin = 2;
}
}
avendo ancora quasi zero esperienza di grafica mi chiedevo se cio fosse una stupidaggine da realizzare o se, per come è fatta quella classetta (credo fatta ad hoc per far provare la semplice esercitazione che ha dato sugli alberi), sarebbe difficile
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Prova a mettere
graphics.setColor(Color.YELLOW); graphics.fillRect(dt.x, dt.y, dt.widht, dt.height); graphics.setColor(Color.BLACK); prima di: graphics.drawRect(dt.x, dt.y, dt.width, dt.height); nel metodo draw. Dovrebbe colorarti i nodi di giallo. Se funziona allora è sufficiente creare una mappa o array indice-colore e trasformare la cosa in: graphics.setColor(getColorePerAltezza(dt.height)); graphics.fillRect(dt.x, dt.y, dt.widht, dt.height); graphics.setColor(Color.BLACK); graphics.drawRect(dt.x, dt.y, dt.width, dt.height);
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
si immaginavo anch io qualcosa di simile; grazie dello spunto, ora provo...certo che ne sai una piu del diavolo tu eh?
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
Hai mica uno screen dell'output generato da questo codice su un alberello di prova?
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:08.



















