Diskuze: Pomoc s drawImage na JPanel
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, problém bude asi v tom že ty načítavaš obrázok až po stlačení tlačidla, ale Swing volá metódú paintComponent už predtým (vlastne tú metódu volá kedy potrebuje, napr. pri zmenení veľkosti okna a pod.) čiže obrazek je null. Stačí ak pridáš podmienku ktorá kontroluje či je null. A to repaint by si na konci paintComponent nemal volať, a ani paintComponent by si nemal volať priamo ale namiesto neho použiť repaint na prekreslenie.
private void jButtonZmenitObrazekActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser jfch = new JFileChooser();
jfch.showOpenDialog(null);
try {
obrazek = ImageIO.read(jfch.getSelectedFile());
repaint();
} catch (IOException ex) {
Logger.getLogger(JDialogKniha.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void paintComponent(Graphics g) {
if (obrazek != null)
g.drawImage(obrazek, 0, 0, null);
}
Moje třída JPanelObrazek, kterou jsem Drag-and-dropnul do JDialogKniha
public class JPanelObrazek extends javax.swing.JPanel {
Image obrazek;
/**
* Creates new form PanelObrazek
*/
public JPanelObrazek() {
initComponents();
}
public void setObrazek(Image img) {
this.obrazek = obrazek;
}
public Image getObrazek() {
return obrazek;
}
JDialog nemá paintComponent metódu, takže na vykreslenie použi metódu paint nejako takto:
public void paint(Graphics g) {
super.paint(g); // aby sa vykreslilo aj samotne okno
if (obrazek != null)
g.drawImage(obrazek, 0, 0, null);
}
Zobrazeno 6 zpráv z 6.