PDA

View Full Version : [Java] overrides a deprecated API


divincodin
08-02-2010, 19:27
Salve ragazzi,ho appena installato la nuova Jdk e adesso il programma non va più. Ho sempre creato interfacce grafiche seguendo questa sorta di schema
(questo è un piccolo esempio di apertura di una immagine che poi viene caricata in metà del Frame):


import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;
import javax.imageio.*;
import javax.swing.border.*;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.color.*;
import java.io.*;
import java.beans.*;

public class anteprima extends JFrame implements ActionListener
{
pannelloa a=new pannelloa();
pannellob b=new pannellob();
JMenuItem carica,elabora;

public anteprima()
{
super();
Toolkit tool = Toolkit.getDefaultToolkit();
Dimension dim =tool.getScreenSize();
setTitle("ANTEPRIMA");
setSize(dim.width/2,dim.height/2);
setLocation(dim.width/4,dim.height/4);
setDefaultCloseOperation(EXIT_ON_CLOSE);

JMenuBar barra=new JMenuBar();
JMenu immagine=new JMenu("Immagine");
carica=new JMenuItem("Carica");
barra.add(immagine);
immagine.add(carica);
carica.addActionListener(this);
this.setJMenuBar(barra);

Container pane=getContentPane();
pane.setLayout(new GridLayout(1,2));
pane.add(a);
pane.add(b);
}

public void actionPerformed(ActionEvent e)
{
Object source=e.getSource();

if(source==carica)
{
JFileChooser finestra= new JFileChooser();
finestra.setDialogTitle("APRI FILE IMMAGINE");
finestra.setAcceptAllFileFilterUsed(true);
finestra.setCurrentDirectory( new File ("c:\\"));

int risposta=finestra.showOpenDialog(this);
if (risposta == JFileChooser.APPROVE_OPTION)
{
try
{
BufferedImage immagine = ImageIO.read(finestra.getSelectedFile());
b.setImage(immagine);
}

catch (Exception EX)
{
System.out.println(" errore durante il caricamento dell' immagine");
}

}
}
}

class pannelloa extends JPanel
{
public pannelloa()
{
setBackground(Color.green);
}
}

class pannellob extends JPanel
{
private BufferedImage immagine;

public pannellob()
{
setBackground(Color.red);
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(immagine!=null)
{
g.drawImage(immagine,0,0,this.getWidth(),this.getHeight(),null);
}
}

public void setImage(BufferedImage nuovaimmagine)
{
immagine=nuovaimmagine;
repaint();
}
}

public static void main (String[] args) {
anteprima A = new anteprima();
A.show();
}

}



Dove sta il problema? :rolleyes:
Grazie anticipatamente per una eventuale risposta...ciao

PGI-Bis
08-02-2010, 20:37
Non vedo problemi che dovrebbero pregiudicare l'eseguibilità di quel programma.

Dovresti dire:

public static void main (String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
anteprima A = new anteprima();
A.setVisible(true);
}
});
}

per far sì che i componenti siano creati nell'EDT (ciò che è imposto dal framework AWT/Swing) e per evitare "show" che è deprecated. Ma anche nella forma che hai adesso il programma dovrebbe essere perfettamente eseguibile.

divincodin
10-02-2010, 01:04
Come al solito diretto,conciso e perfetto :D
Grazieeee ;)