Witam. Mam sobie o to dwie takie klasy.
Dodałem event wszystko po raz pierwszy ładnie się wyswietla czemu tylko nie robie update ? Jak zrobić by się stan tej ramki odświeżał.
"panel.licz" lub this.licz sie zmienia.
package Main;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Main {
static ObrazPanel panel;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { public void run() {
JFrame frame = new JFrame("Paweł Białas, 155030 5 pkt!");
JButton button = new JButton("tura");
panel = new ObrazPanel();
Akcja lol = new Akcja();
button.addActionListener(lol);
frame.add(panel,BorderLayout.NORTH);
frame.add(button,BorderLayout.SOUTH);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
} });
}
private static class Akcja implements ActionListener
{
public void actionPerformed(ActionEvent e) {
panel.licz++;
Graphics g = null;
panel.paintComponent(g);
}
}
}
package Main;
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 ObrazPanel extends JPanel {
public int licz;
private BufferedImage image;
public ObrazPanel() {
super();
this.licz = 1;
File imageFile = new File("C.png");
try {
image = ImageIO.read(imageFile);
} catch (IOException e) {
System.err.println("Blad odczytu obrazka");
e.printStackTrace();
}
Dimension dimension = new Dimension(400, 400);
setPreferredSize(dimension);
}
@Override
public void paintComponent(Graphics g) {
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, 0, 0,null);
for (int i = 0; i <20 && i<this.licz; i++)
for (int j = 0; j< 20; j++)
g.copyArea(0, 0, imageWidth, imageHeight, i * imageWidth, j * imageHeight);
}
}