Обновление образа JLabel в Netbeans (извините, пользователь GUI Builder)
Я прошел через пару вопросов, и я хотел бы извиниться заранее. Я знаю, что общий совет заключается в том, что лучше начинать без использования графических интерфейсов, чтобы лучше понимать работу, так как я понимаю, что создание графического интерфейса в руках новичка похоже на решение целого без реального знания о части.
Три важных компонента - это imageArea, toBoatBtn и toRespBtn. Я уже установил " Пользовательский код создания " imageArea в Netbeans на " новый loadImage (1); " для загрузки первого изображения. И это немного хорошо.
Две кнопки должны изменить изображение в imageArea. Предполагается, что toBoatBtn загружает 2-е изображение (loadImage (2)), а toRespBtn - загрузку исходного изображения (loadImage (1)).
Я не знаю, как продолжить этот процесс. Это не меняет изображения. Я пытался провести повторную проверку и перерисовку, изменить наследование на JPanel и внести в него изменения, но все равно не повезло. Это не случай неправильного имени пути для 2-го изображения, потому что, если я установлю "Пользовательский код создания" в Netbeans на "новый loadImage(2);", он также появится. Я действительно хочу продолжить с этим вместо использования JLabel.setIcon(параметр), потому что есть перспектива увеличения и изменения положения изображения (я даже не могу понять это, так что это определенно шатко). Я ценю любую помощь.
(Я удалил пустые комментарии и код, который netbeans не позволяет вам трогать.)
package source;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JLabel;
class loadImage extends JLabel {
BufferedImage img;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img,0,0,getWidth(),getHeight(),this);
System.out.println("\nImgWidth: " + img.getWidth()
+ "\nFrameWidth: " + getWidth()
+ "\nImgHeight: " + img.getHeight()
+ "\nFrameHeight: " + getHeight()
);
}
public loadImage(int imageToUse) {
System.out.println("Image Num: " + imageToUse);
try {
if(imageToUse == 1)
{
img = ImageIO.read(new File("resp.png"));
}
else
{
img = ImageIO.read(new File("boat.png"));
}
} catch (IOException e) {}
}
}
/****************************************************************/
public class NewJFrame extends javax.swing.JFrame{
public NewJFrame() {
initComponents();
setLocationRelativeTo(null);
}
private void toBoatBtnActionPerformed(java.awt.event.ActionEvent evt) {
imageArea = new loadImage(2);
super.revalidate();
super.repaint();
}
private void toRespBtnActionPerformed(java.awt.event.ActionEvent evt) {
imageArea = new loadImage(1);
super.revalidate();
super.repaint();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel imageArea;
private javax.swing.JButton toBoatBtn;
private javax.swing.JButton toRespBtn;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel workspace;
// End of variables declaration
}
РЕДАКТИРОВАТЬ: изменения loadImage
public loadImage() {
try {
img = ImageIO.read(new File("resp.png"));
} catch (IOException ex) {}
}
public void setImage(int imageToUse)
{
System.out.println("Image Num: " + imageToUse);
try {
if(imageToUse == 1)
{
img = ImageIO.read(new File("resp.png"));
}
else
{
img = ImageIO.read(new File("boat.png"));
}
} catch (IOException e) {
}
}
РЕДАКТИРОВАТЬ: проблема решена благодаря Fast Snail. Помощь была высоко оценена! Я также буду читать о методе setIcon, который предложил Hovercraft Full of Eels.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
((loadImage)imageArea).setImage(2);
this.repaint();
}