Хорошо, я только привыкаю к ООП и сейчас только учусь свингу.Я делаю простое приложение, которое представляет собой сетку 2х2 из 4 изображений (X, O, Квадрат и Треугольник), и щелкаю любое из них, меняя форму цвета на синий.
Я не могу получить егохотя переключитесь на новое изображение, и я думаю, что оно как-то связано с чем-то фундаментальным для моей программы.
Не возражаете ли вы взглянуть?
Класс JFrame:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import javax.swing.JPanel;
public class Frame1 {
public JFrame frame;
Frame1 window = new Frame1();
window.frame.setVisible(true);
}
public Frame1() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 900, 900);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
Squares x = new Squares("images\\black-X.png", "images\\blue-X.png", 0, 0, 450, 450, "x");
Squares o = new Squares("images\\black-O.png", "images\\blue-O.png", 450, 0, 450, 450, "o");
Squares sq = new Squares("images\\black-sq.png", "images\\blue-sq.png", 0, 425, 450, 450, "sq");
Squares tri = new Squares("images\\black-tri.png", "images\\blue-tri.png", 450, 410, 450, 450, "tri");
frame.getContentPane().add(x.getLabel());
frame.getContentPane().add(o.getLabel());
frame.getContentPane().add(sq.getLabel());
frame.getContentPane().add(tri.getLabel());
}
}
Mouselistener Class:
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class clickListener implements MouseListener{
Squares ob = new Squares();
public clickListener(Squares newSquare) {
ob = newSquare;
}
public void mouseClicked(MouseEvent e) {
ob.changePic();
}
}
А потом класс объекта, который я создаю для каждого изображения
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Squares {
String pic1, pic2, name;
int x, y, width, height;
JPanel panel = new JPanel();
JLabel label = new JLabel();
public Squares() {
;
}
public Squares(String pic1, String pic2, int x, int y, int width, int height, String name) {
this.pic1 = pic1;
this.pic2 = pic2;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.name = name;
BufferedImage myPic1 = null;
try {
myPic1 = ImageIO.read(new File(pic1));
} catch (IOException ex) {System.out.println("error in image upload");}
/*
panel.setBounds(x, y, width, height);
panel.add(new JLabel(new ImageIcon(myPic1)));
panel.addMouseListener(new clickListener(this));
*/
label = new JLabel(new ImageIcon(myPic1));
label.setBounds(x, y, width, height);
label.addMouseListener(new clickListener(this));
}
public JLabel getLabel() {
return label;
}
public String getName() {
return this.name;
}
public void changePic() {
JOptionPane.showMessageDialog(null, "change pic reached for " + this.name);
BufferedImage myPic2 = null;
try {myPic2 = ImageIO.read(new File(pic2));}
catch(IOException ex) {System.out.println("error in image upload");}
label = new JLabel(new ImageIcon(myPic2));
label.setBounds(x, y, width, height);
label.repaint();
label.revalidate();
}
}
Я изначально использовал JPanels, которые содержали каждый JLabel, но я избавился от нихвсе для упрощения вещей.
Так что да, любые предложения приветствуются.Спасибо!