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
E' un po' che non metto mano a Java... ma prova a settare il Layout Manager a quel Container.
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).
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
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.
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.