W związku z tym, ze mój kod jest baardzo długi zamieszczam interesujące części ;P
public class Main {
public static void main(String[] args) {
Toolkit scrinfo = Toolkit.getDefaultToolkit();
Dimension dim = scrinfo.getScreenSize();
Window wnd = new Window(dim);
wnd.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
wnd.setVisible(true);
wnd.setSize(900, 600);
wnd.setTitle( "Przekształcenia afiniczne. Autor: Jan Kowalski" );
wnd.setLocationRelativeTo(null);
}
}
class Menu extends JPanel implements ActionListener {
public JButton b1, b2, b3, b4, b5, b6, b7, b8;
public DrawPane d;
public Menu(DrawPane d) {
super();
this.d = d;
setLayout(new GridLayout(8,1));
b7 = new JButton("Wczytaj obraz rastrowy");
b7.setVisible(true);
add(b7);
b5 = new JButton("Wczytaj macierz");
b5.setVisible(true);
add(b5);
b5.addActionListener( this );
b7.addActionListener( this );
setVisible(true);
d.opcja = 0;
}
public void actionPerformed(ActionEvent event)
{
Object source = event.getSource();
if (source == b5) {
try {
d.file2=wybierzPlik(); //zwraca wybrany File
wczytajMacierz(); //wczytuje macierz przeksztalcen pod pole d.macierz
d.przeksztalcRastrowo(new Macierz()); //przeksztalca obraz podana macierzą
d.opcja=8;
d.repaint();
} catch (Exception e) {}
}
else if (source == b7) {
try {
d.file=wybierzPlik();
d.wczytaj(); //wczytuje obraz
d.setPreferredSize(new Dimension(d.img2.getWidth()*2, d.img2.getHeight()*2));
d.opcja=7;
d.repaint();
} catch (Exception e) {}
}
}
}
class DrawPane extends JPanel {
public int opcja;
public Macierz macierz;
public File file, file2;
public BufferedImage img, img2;
public int szerokosc, wysokosc, szerokosc2, wysokosc2, oX, oY;
public Window parent;
public DrawPane(Window parent) {
super();
setLayout(new GridLayout(1,1));
setBackground( new Color(153, 204, 255) );
opcja = 0;
this.parent = parent;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
szerokosc = getWidth();
wysokosc = getHeight();
if(opcja==7 || opcja==8) {
if(opcja==7) { //to jest wywoływane po wczytaniu obrazka, gdy pojawia się on po raz pierwszy na ekranie. Suwaki pojawiają się dopiero po rozciągnięciu
g2d.drawImage(img2,szerokosc/2,wysokosc/2, null);
oX = getWidth()/2;
oY = getHeight()/2;
}
else if (opcja==8){
if(oX==getWidth()/2 && oY==getHeight()/2) //przy rozciąganiu okienka, obrazek musi sie przenosić, dlatego ta część jest taka dziwna :P
g2d.drawImage(img2,0,0, null);
else {
przeksztalcRastrowo(new Macierz());
g2d.drawImage(img2,0,0, null);
oX=getWidth()/2;
oY=getHeight()/2;
repaint(); //tu musi byc repaint, bo inaczej nie dziala dobrze :P
}
}
}
}
public void wczytaj() throws IOException {
img = ImageIO.read(file);
img2 = ImageIO.read(file);
macierz = new Macierz();
}
}
class Window extends JFrame {
JScrollPane suwak;
DrawPane d;
public Window(Dimension dim) {
setLayout(new BorderLayout());
Container contents = getContentPane();
d = new DrawPane(this);
Menu m = new Menu (d);
JScrollPane scroll = new JScrollPane(d);
contents.add(m, BorderLayout.WEST);
contents.add(scroll,BorderLayout.CENTER);
}
}
To są te rzeczy, które są powiazane z niepojawianiem sie suwaków. Pozostała część kodu to zupełnie niepowiązane metody :P