Vykreslení obrázku – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vykreslení obrázku – Java – Fórum – Programujte.comVykreslení obrázku – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Braba0
Duch
7. 11. 2010   #1
-
0
-

Ahoj, poradíte mi někdo prosím? Snažím se vytvořit třídu která se bude starat o zobrazní obrázku. Když udělám jeji instanci a zavolám metodu setImage("foto.jpg") tak mi vyskočí NullPointerException. Už si nevím rady :/ už ani google ani dokumentace me nezachranili :D

Picture.java:



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.JPanel;

public class Picture extends JPanel{

JPanel panel;
BufferedImage bi;
Graphics g;

public Picture(int x,int y, int width, int height){
setBounds(x, y, width, height);
setBackground(Color.white);
setBorder(BorderFactory.createLineBorder(Color.black));
}

public void setImage(String path){
try {
bi = ImageIO.read(new File(path));
} catch (Exception ex){
}
Image img = bi.getScaledInstance(this.WIDTH, this.HEIGHT, 100);
g.drawImage(img, this.WIDTH, this.HEIGHT, null);
}


díky za rady

Nahlásit jako SPAM
IP: 85.13.126.–
Reklama
Reklama
KIIV+42
God of flame
7. 11. 2010   #2
-
0
-

a tady te taky nikdo nezachrani, kdyz nereknes kde presne ti to haze tu vyjimku a nedas zbytek relevantniho kodu.. ..

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
SeraphCZ0
Stálý člen
7. 11. 2010   #3
-
0
-

To Braba : Nikde nemáš inicializovaný Graphics g; proto ti to hlásí null Pointer. Vyřešilo by to kdyby jsi dal do konstruktoru g = this.getGraphics(); (ted nevim jestli se ta metoda jmenuje přesně takhle, kdyžtak googli!) Každopádně je to tvoje řešení na prd protože kdykoliv se zavola repaint (tzn. třeba když změníš velikost okna) musíš překrýt (@override) metodu RepaintComponent, do ní dát veškerý vykreslování s tím že budeš mít ošetřený že když nemáš nastavenej obrázek tak to nevykreslí nic. Samotnej obrázek si dej jako třídní proměnnou a její setter bude obsahovat jen naloadovaní obrázku do proměnný a zavolání repaint();

Nahlásit jako SPAM
IP: 83.208.186.–
SeraphCZ0
Stálý člen
7. 11. 2010   #4
-
0
-

oprava (nějak mi nejde zeditovat příspěvek) : Každopádně je to tvoje řešení na prd protože kdykoliv se zavola repaint (tzn. třeba když změníš velikost okna) tak to zmizí!

Nahlásit jako SPAM
IP: 83.208.186.–
Braba0
Duch
7. 11. 2010   #5
-
0
-

To SeraphCZ : Zkusil jsem co jsi mi radil a bohužel bez úspěchu. Jaký postup by jsi zvoli ty??(jen naznačit)

Nahlásit jako SPAM
IP: 85.13.126.–
SeraphCZ0
Stálý člen
8. 11. 2010   #6
-
0
-

Mno hele já ti přeci jen pošlu kód(teď jsem ho zplácal takže vím že funguje):

import java.awt.Graphics;

import java.awt.Image;


public class PanelObrazek extends javax.swing.JPanel {


private Image obrazek;
public PanelObrazek() {
initComponents();
obrazek = null;
}

@Override
protected void paintComponent(Graphics g) {
if(obrazek!=null){
g.drawImage(obrazek, 0, 0, this);
}
}

public void setObrazek(Image obrazek) {
this.obrazek = obrazek;
repaint();
}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>

}

Nahlásit jako SPAM
IP: 83.208.186.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 30 hostů

Podobná vlákna

Prog na vykreslení obrázku — založil Šulin Hrozný

Vykreslení vzorku — založil BL

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý