Cześć, uczę się programować w Java i mam pewien problem, stworzyłem sobie klasę Image, która rozszerza JPanel i służy mi do wczytywania obrazów do programu:
package domowka;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class Image extends JPanel{
private BufferedImage image;
public Image(String fileName) throws IOException {
File imageFile = new File("img/"+fileName);
try {
image = ImageIO.read(imageFile);
} catch (IOException e) {
System.err.println("Blad odczytu obrazka");
e.printStackTrace();
}
Dimension dimension = new Dimension(image.getWidth(), image.getHeight());
setPreferredSize(dimension);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, 0, 0, this);
//g2d.drawImage(image, 0, 100, 344,400, this);
}
}
Teraz korzystając z tej klasy wywołuję ją w innej klasie, w której ładuje sobie obrazki z listy w funkcji initComponents(). Dodaję przycisk i słuchacza, poprzez wciśnięcie zmieniam aktualny obrazek do wyświetlenia, ale niestety initComponents mi tego nie wczytuje tzn. jest taki obrazek, który był na samym początku - co robię źle i jak to naprawić
package domowka;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
public class JFrameGameWindow extends JFrame implements ActionListener{
//JPanel panel = new JPanel(new FlowLayout());
JButton button1 = new JButton("Losuj");
JLabel text = new Text();
Randomisation randomCard = new Randomisation(52);
int accCard = 0;
JPanel[] images;
GroupLayout layout;
public JFrameGameWindow() throws IOException
{
super("Domówka");
//this.setTitle("Domówka");
//this.setResizable(false);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setIconImage(Toolkit.getDefaultToolkit().getImage("img/DomowkaLogo.png"));
int widthDisplay = Toolkit.getDefaultToolkit().getScreenSize().width;
int heightDisplay = Toolkit.getDefaultToolkit().getScreenSize().height;
int widthFrame = 360;
int heightFrame = 640;
this.setBounds((widthDisplay-widthFrame)/2,(heightDisplay-heightFrame)/2,widthFrame,heightFrame);
button1.addActionListener(this);
initComponents();
pack();
//Images.setVisible(false);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){
// TODO Auto-generated method stub
accCard=randomCard.get(); //ustawienie aktualnej karty do wyswietlenia poprzez wywolanie losowania bez powtorzen
System.out.println(accCard);
}
public void initComponents() throws IOException
{
button1.setPreferredSize(new Dimension(100,50));
//panel.add(button1);
ReadFile listOfCards = new ReadFile("listOfCards.txt");
images = new Image[listOfCards.content.size()];
for(int i=0;i<images.length;i++) {
images[i]=new Image((String)listOfCards.content.get(i));
}
layout = new GroupLayout(getContentPane());
this.getContentPane().setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addContainerGap(10, Short.MAX_VALUE)
.addGroup(
layout.createParallelGroup()
.addComponent(text)
.addComponent(images[accCard],GroupLayout.DEFAULT_SIZE,GroupLayout.DEFAULT_SIZE,3000)
.addComponent(button1,GroupLayout.DEFAULT_SIZE,GroupLayout.DEFAULT_SIZE,500)
)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addContainerGap(10, Short.MAX_VALUE)
.addComponent(text)
.addContainerGap(10, Short.MAX_VALUE)
.addComponent(images[accCard],GroupLayout.DEFAULT_SIZE,GroupLayout.DEFAULT_SIZE,3000)
.addContainerGap(10, Short.MAX_VALUE)
.addComponent(button1,GroupLayout.DEFAULT_SIZE,GroupLayout.DEFAULT_SIZE,3000)
);
}
}
Tutaj jest jeszcze główna klasa, w której jest main, chociaż nie wiem czy jest ona komuś potrzebna:
package domowka;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
System.out.println("Hello World!");
new JFrameGameWindow();
}
}
Będę bardzo wdzięczny za pomoc ;)