|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 25
|
[Java]PaintComponent(Graphics g)
Salve ragazzi,
ho il seguente problema: ho creato una classe Graphic che estende JPanel e che mi sovrascrive il metodo paintComponent(Graphics g); Codice:
package vario;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Graphic extends JPanel {
public Graphic() {
super();
}
@Override
public void paintComponent(Graphics g) {
g.drawLine(0,10,10,10);
System.out.println("ciao");
}
}
non riesco a trovare la soluzione al problema perchè comunque il metodo paintComponent non può essere invocato direttamente. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
La tua classe non fa una piega, il problema è da qualche altra parte. Sei certo che il componente Graphic sia inserito nella finestra e che abbia una dimensione maggiore di zero? Detto altrimenti, se nel main scrivi:
Codice:
JFrame win = new JFrame("Test");
win.add(new vario.Graphic());
win.setSize(400, 400);
win.setVisible(true);
__________________
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: Apr 2010
Città: Frosinone
Messaggi: 416
|
può essere che il componente non sia visibile e quindi non viene disegnato? chiama un setVisible(true) per sicurezza
|
|
|
|
|
|
#4 | |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 25
|
Quote:
mi spiego meglio la JFrame ha solo il compito di far scegliere all'utente una sezione, scelta si apre una JDialog che svolge la varie funzioni e in una volevo che si visualizzasse un grafico ma non lancia il metodo paint e quindi mi rimane una finestra vuota! JFrame Codice:
public class MainFrame extends JFrame {
public MainFrame() {
super("");
initComponents();
add(new ImagePanel(getClass().getResource("/images/F14.jpg"),0,0,500,265)).setVisible(true);
pack();
}
.
.
.
private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {
GraphicPanel gp=new GraphicPanel(null,true);
gp.add(new Graphic());
gp.setSize(350,350);
gp.setVisible(true);
}
Codice:
public class GraphicPanel extends javax.swing.JDialog {
/** Creates new form GraphicPanel */
public GraphicPanel(java.awt.Frame parent, boolean modal) {
super(parent, modal);
}
}
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Anche quel codice è ok.
Se allarghi la finestra di dialogo, compare la scritta "ciao" più volte sullo schermo? Ps.: non è che usi una versione di Java dei tempi che furoni, tipo la 1.4?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#6 | |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 25
|
Quote:
ho provato ad allargare la finestra ma niente non lo chiama proprio il metodo. Comunque uso NetBeans 6.9.1 versione di java 1.7.0ea |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Allora vediamo se il problema è nella piattaforma (magari un driver video che non viene digerito bene da java).
Codice:
//file Test.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
start();
}
});
}
private static void start() {
JButton button = new JButton(new AbstractAction("test") {
public void actionPerformed(ActionEvent e) {
createAndShowDialog();
}
});
JFrame window = new JFrame("Test");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(button);
window.pack();
window.setVisible(true);
}
private static void createAndShowDialog() {
GraphicPanel dialog = new GraphicPanel((JFrame)null, true);
dialog.add(new Graphic());
dialog.setSize(300, 300);
dialog.setVisible(true);
}
}
class GraphicPanel extends JDialog {
public GraphicPanel(Frame window, boolean modal) {
super(window, modal);
}
}
class Graphic extends JPanel {
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.PINK);
g.fillRect(0, 0, getWidth(), getHeight());
System.out.println("Nel mezzo del cammin di nostra vita...");
}
}
Se non funziona, il problema è nella piattaforma. Se funziona, bisogna spulciare il codice completo del programma: forse c'è un dettaglio nascosto. In ogni caso consiglio il downgrade a java 1.6, più che altro perchè con una early access non puoi mai dire se ci sia un'implementazione troppo allegra nelle librerie o se in effetti sia il programma a contenere l'intoppo.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#8 | |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 25
|
Quote:
Il problema non era mio(codice scritto), ma di NetBeans perchè tramite il suo tool di creazione della GUI non mi lanciava il metodo paintComponent e quindi non mi visualizzava il grafico invece creando una classe che estende JDialog allora tutto funziona alla perfezione! Grazie mille per il tuo aiuto PGI-Bis, senza di te sarei ancora li davanti al computer a strippare! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:22.




















