PDA

View Full Version : [Java] Netbeans: disegnare palle e quadri


Barbalbero
13-08-2007, 21:57
Premetto che ho provato e riprovato...ma ora mi arrendo.
Qual è il segreto per disegnare grafica in un pannello con NetBeans?

public Class Main(){
...
public static void main(String[] args) {
mnFrame = new MainFrame();
mnFrame.setVisible(true);
}
...
}

public Class MainFrame {
...
public MainFrame() {
initComponents();
Carta foglio = new Carta(100,100);
Container c = this.getContentPane();
c.add(foglio);
}
...
}

public class Carta extends JPanel{

private int larghezza,altezza;

public Carta(int width,int height) {
larghezza=width;
altezza=height;
}

public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.CYAN);
g.fillRect(20,0,40,40);
g.setColor(Color.BLUE);
g.fillRect(20,40,70,70);
}
}

Non disegna niente. Vedo un bel pannello grigio

naoto84
13-08-2007, 22:54
E' un po' che non metto mano a Java... ma prova a settare il Layout Manager a quel Container.

PGI-Bis
13-08-2007, 23:10
Il contenitore ha già un layout manager (FlowLayout se è un JPanel, BorderLayout se è il pannello del contenuto di un JFrame).

Carta non ha una dimensione. Per dargliela puoi scrivere in Carta:

public Dimension getPreferredSize() {
return new Dimension(larghezza, altezza);
}

Ricorda di fare un pack() sulla finestra (o di darle una dimensione maggiore di 100, 100).

naoto84
13-08-2007, 23:28
Il contenitore ha già un layout manager (FlowLayout se è un JPanel, BorderLayout se è il pannello del contenuto di un JFrame).

Ehi, vedo che tu sei l'uomo Java e approfitto: anche prima era così? Mi ricordo che una volta dovevo sempre specificarlo.

E poi la dimensione la dai sovrascrivendo il metodo getPreferredSize e non usando il set.... perché fai così? Grazie. :D

PGI-Bis
13-08-2007, 23:41
Un layout l'hanno sempre avuto. Non ricordo quale fosse quello predefinito per il pannello del contenuto delle finestre Swing, forse era FlowLayout (che è quello predefinito dei JPanel).

Sovrascrivo getPreferredSize perchè il disegno è fatto con il posizionamento assoluto da cui induco che quantomeno la dimensione preferita di Carta sia destinata a restare quella assegnata in costruzione.

Se così non fosse, andrebbe rimosso il costruttore che accetta i due interi e la dimensione andrebbe impostata esternamente con setPreferredSize.

naoto84
13-08-2007, 23:53
Un layout l'hanno sempre avuto. Non ricordo quale fosse quello predefinito per il pannello del contenuto delle finestre Swing, forse era FlowLayout (che è quello predefinito dei JPanel).

Sovrascrivo getPreferredSize perchè il disegno è fatto con il posizionamento assoluto da cui induco che quantomeno la dimensione preferita di Carta sia destinata a restare quella assegnata in costruzione.

Se così non fosse, andrebbe rimosso il costruttore che accetta i due interi e la dimensione andrebbe impostata esternamente con setPreferredSize.

Praticamente hai tagliato fuori la variabile interna maneggiata dal set e getpreferredsize... così non si può più cambiare. Capito :)
Anche usare il set ora è inutile, tanto il get ritorna sempre la stessa cosa. Che maniere forti. :p

(Giurerei che quando studiavo fondamenti, con java 1.2, non settare il Layout Manager mi rendeva sempre invisibile tutto... :what: chissà cosa facevo)

Barbalbero
14-08-2007, 10:06
Il contenitore ha già un layout manager (FlowLayout se è un JPanel, BorderLayout se è il pannello del contenuto di un JFrame).

Carta non ha una dimensione. Per dargliela puoi scrivere in Carta:

public Dimension getPreferredSize() {
return new Dimension(larghezza, altezza);
}

Ricorda di fare un pack() sulla finestra (o di darle una dimensione maggiore di 100, 100).


OOOK funzia.
Danke