Come da titolo. In un'applet c'è Image, ma vedo che non funziona anche in un'applicazione normale... cosa dovrei usare?Dovrei disegnare un'immagine che ha proprie dimensioni, e con un metodo scegliere indipendentemente per quanto deve estendersi...
Come da titolo. In un'applet c'è Image, ma vedo che non funziona anche in un'applicazione normale... cosa dovrei usare?Dovrei disegnare un'immagine che ha proprie dimensioni, e con un metodo scegliere indipendentemente per quanto deve estendersi...
Ci sono diverse soluzioni. Una è quella di ridimensionare prima di tutto la immagine (vedi getScaledInstance() di Image) e poi disegnarla ogni volta che serve così com'è cioè appunto già scalata. Questo ha il vantaggio che la immagine puoi metterla anche solo in un ImageIcon su un componente es. JLabel o altro.Originariamente inviato da Dreamer89
Come da titolo. In un'applet c'è Image, ma vedo che non funziona anche in un'applicazione normale... cosa dovrei usare?Dovrei disegnare un'immagine che ha proprie dimensioni, e con un metodo scegliere indipendentemente per quanto deve estendersi...
Se invece disegni tu la immagine direttamente su un Graphics, puoi sia disegnarla avendola già scalata come ho detto prima ma puoi anche scalarla "al volo", mentre la disegna. In tal caso usa il metodo drawImage() che riceve width/height.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Sì ma Image funziona in un'applet, non in un'applicazione normale (o almeno per quanto abbia provato)... a me servirebbe per un'applicazione senza applet, altrimenti alcuni metodi di Image non mi funzionano.Originariamente inviato da andbin
Ci sono diverse soluzioni. Una è quella di ridimensionare prima di tutto la immagine (vedi getScaledInstance() di Image) e poi disegnarla ogni volta che serve così com'è cioè appunto già scalata. Questo ha il vantaggio che la immagine puoi metterla anche solo in un ImageIcon su un componente es. JLabel o altro.
Se invece disegni tu la immagine direttamente su un Graphics, puoi sia disegnarla avendola già scalata come ho detto prima ma puoi anche scalarla "al volo", mentre la disegna. In tal caso usa il metodo drawImage() che riceve width/height.
Ma non centra nulla applet o applicazione! Sei riuscito in qualche modo a caricare una immagine e ora hai un Image? Bene, allora o la scali prima e poi disegni quella già scalata, o la disegni scalandola "al volo" mentre disegna.Originariamente inviato da Dreamer89
Sì ma Image funziona in un'applet, non in un'applicazione normale (o almeno per quanto abbia provato)... a me servirebbe per un'applicazione senza applet, altrimenti alcuni metodi di Image non mi funzionano.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Allora, ho utilizzato gli stessi procedimenti che ho usato per un'applet e lì mi funzionano, ma se uso Image in un'applicazione normale, mi da errore qui: image = getImage (getDocumentBase(), string);
codice:import java.awt.Image; import java.awt.Graphics; import java.awt.Dimension; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JFrame; import javax.swing.JFileChooser; import javax.swing.JButton; public class Zoom extends JPanel { private JButton pic; private JButton moreZoom; private JButton lessZoom; private Image image; private static JPanel controlPanel; private static JScrollPane scroll; public Zoom() { pic = new JButton ("Choose a pic"); moreZoom = new JButton ("+"); lessZoom = new JButton ("-"); ButtonHandler handler = new ButtonHandler(); pic.addActionListener (handler); moreZoom.addActionListener (handler); lessZoom.addActionListener (handler); controlPanel = new JPanel(); controlPanel.add (pic); controlPanel.add (moreZoom); controlPanel.add (lessZoom); setPreferredSize (new Dimension (0, 0)); } private class ButtonHandler implements ActionListener { public void actionPerformed (ActionEvent event) { if (event.getSource() == pic) { JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog (Zoom.this); if (result == JFileChooser.APPROVE_OPTION) { String string = fileChooser.getSelectedFile().getPath(); if (string != null) { image = getImage (getDocumentBase(), string); setPreferredSize (new Dimension (getWidth(), getHeight())); scroll.updateUI(); repaint(); } } } } } public void paintComponent (Graphics g) { super.paintComponent (g); if (image != null) g.drawImage (image, 0, 0, 300, 300, this); } public static void main (String[] args) { scroll = new JScrollPane(new Zoom()); JFrame frame = new JFrame ("Zoom"); frame.setSize (640, 480); frame.setLocationRelativeTo (null); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.add (controlPanel, BorderLayout.NORTH); frame.add (scroll); frame.setVisible (true); } }
Ma ovvio! ..... nelle applicazioni non esiste un "document base" e nemmeno un "code base". Quei metodi getDocumentBase() e getCodeBase() sono solo per le applet (infatti sono di Applet ...).Originariamente inviato da Dreamer89
Allora, ho utilizzato gli stessi procedimenti che ho usato per un'applet e lì mi funzionano, ma se uso Image in un'applicazione normale, mi da errore qui: image = getImage (getDocumentBase(), string);
E quel getImage() lo stai invocando come se fosse di JPanel ... ma non c'è un getImage!! Esiste un getImage() di java.awt.Toolkit ma richiede comunque un URL o nome di file.
Visto che hai usato JFileChooser, lui ti fornisce un java.io.File. Usa la read() di javax.imageio.ImageIO per caricare la immagine ... che fai 10 volte prima ..![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Grazie mille, così va tutto bene! Ma c'è un modo per velocizzare lo spostamento di una scrollbar quando uso la rotellina del mouse?
Cosa intendi??? Se non sbaglio, è configurabile nel sistema (almeno per Windows) la "reattività" all'uso della rotellina del mouse.Originariamente inviato da Dreamer89
Ma c'è un modo per velocizzare lo spostamento di una scrollbar quando uso la rotellina del mouse?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet