Witam. Problem jest taki. Uczę się z podręcznika Horstmann,Cornell JAVA Wydanie IX. Kod źródłowy przepisany z podręcznika do Eclipse nie działa mi poprawnie i nie wiem, jaka jest przyczyna. Po uruchomieniu wyświetla się okienko, ale puste, nie pojawiają się w nim obrazy, które powinny (plik blue-ball.gif mam na dysku). Co więcej okienko nie reaguje na klikanie zamknięcia w prawym górnym rogu, ani nie chce się zamknąć z paska zadań. Zamyka się dopiero przy pomocy Menedżera zadań. Co jest źle? Wszystko jest wpisane w Eclipse tak, jak w podręczniku. Jest ktoś w stanie mi pomóc?
Kod źródłowy:
import java.awt.EventQueue;
import javax.swing.JFrame;
public class ImageTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new ImageFrame();
frame.setTitle("Obraz");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
import javax.swing.JFrame;
class ImageFrame extends JFrame
{
public ImageFrame()
{
add(new ImageComponent());
pack();
}
}
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
class ImageComponent extends JComponent
{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
private Image image;
public ImageComponent()
{
image = new ImageIcon("blue-ball.gif").getImage();
}
public void paintComponent(Graphics g)
{
if(image == null) return;
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
g.drawImage(image, 0, 0, null);
for ( int i =0; i*imageWidth <= getWidth(); i++)
for(int j=0; j*imageHeight <= getHeight(); j++)
if(i+j>0) g.copyArea(0,0, imageWidth, imageHeight, i*imageWidth, j*imageHeight);
}
public Dimension getPreferredSize()
{
return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}