Изменение изображения в JPanel при нажатии кнопки в Java SwingJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Изменение изображения в JPanel при нажатии кнопки в Java Swing

Сообщение Anonymous »

Мне хорошо известно о нескольких других сообщениях подобного характера. Я пытался использовать их, чтобы помочь себе, однако либо я просто что-то упускаю из виду, либо в моем коде не хватает чего-то важного для правильной работы. У меня есть основная JPanel, в которой я пытаюсь изменить изображение каждый раз при нажатии кнопки (и я начинаю понимать, что мой план по изменению макета при нажатии другой кнопки будет намного сложнее), но когда это заходя в раздел @Override, я обнаруживаю, что значок нельзя изменить, или когда я пытаюсь реализовать что-то, что я нахожу из Stack Overflow или из предложенного в VSCode, это приводит к множеству красных линий.
Я хочу иметь массив изображений доступен так, что при нажатии кнопки он проходит через генератор случайных чисел и выводит число, которое случайным образом извлекает изображение из массива. Не волнуйтесь, я надеюсь, что у меня хорошее образование в области генерации случайных чисел.
И да, я понимаю, что это настоящий бардак. За последние пару недель я несколько раз пытался это понять (начал с пары часов в день, чтобы оставаться в здравом уме, заканчивая непрерывными 72-часовыми сеансами, просыпаясь ото сна с разными идеями, которые можно попробовать).
Вот некоторые разделы моего кода, я включаю то, что считаю необходимым, поскольку я написал много, и навигация - это кошмар.
private JPanel topRow, leftPane, mainPane, bottomRow, mPane1;
private JButton btnOne, btnTen, btnHun, btnTho;
private JTextArea mPane2, test;
private String imagePath, name;
private ImageIcon image;

public WSgui() {
super("Character Wish Simulator");
this.setSize(900, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());

this.mainPane = new JPanel();
this.mainPane.setBackground(Color.ORANGE);
this.mainPane.setMinimumSize(new Dimension(650, 400));
this.mainPane.setBorder(new EmptyBorder(40,40,40,40));
this.mainPane.setLayout(new BorderLayout());

//buttons
this.btnOne = new JButton("x1 wish");
this.btnOne.setSize(200, 100);

//setting panes for main
this.mPane1 = new JPanel();
int xSize = ((int) mainPane.getSize().getWidth());
int ySize = ((int) mainPane.getSize().getHeight());
int height = (int)(Math.round(ySize * 0.80));
int width = (int)(Math.round(xSize * 0.80));
this.mPane1.setPreferredSize(new Dimension(width, height));
this.mPane1.setMinimumSize(new Dimension(xSize, ySize));
this.mPane1.setMaximumSize(new Dimension(1000, 1000));

this.mPane2 = new JTextArea();
this.mPane2.setText("This should be below the picture");
this.mPane2.setFont(new Font("Dialog", Font.PLAIN, 15));
this.mPane2.setMaximumSize(new Dimension(width, 50));
this.mPane2.setWrapStyleWord(true);
this.mPane2.setLineWrap(true);
this.mPane2.setEditable(false);

this.btnTen = new JButton("x10 wish");
this.btnTen.setSize(200, 50);
this.btnTen.addActionListener(this);
//This idea (action listener) came from StackOverflow, but sadly is not working

this.btnHun = new JButton("x100 wish");
this.btnHun.setSize(200, 50);
this.btnHun.addActionListener(this);

this.btnTho = new JButton("x1000 wish");
this.btnTho.setSize(200, 50);
this.btnTho.addActionListener(this);

//Test image for Main Pane
image = new ImageIcon(bnr);//some more ideas I found
JLabel image5 = new JLabel(image);
JLabel image2 = new JLabel(new ImageIcon(lpImage));
JLabel image3 = new JLabel(new ImageIcon(mImage));
JLabel image4 = new JLabel(new ImageIcon(xtra));
this.mPane1.add(image3);
this.leftPane.add(image2);
this.topRow.add(image5);
this.bottomRow.add(image4);
this.mainPane.add(this.mPane1, BorderLayout.CENTER);
this.mainPane.add(this.mPane2, BorderLayout.SOUTH);
this.btnOne.addActionListener(e -> image5.setIcon(images[3]));
ImageIcon[] images = new ImageIcon[] {//my pathetic attempt at an array
new ImageIcon("img/t1.png"), new ImageIcon("img/t2.png"), new ImageIcon("img/t3.jpg"),
new ImageIcon("img/t4.jpg"), new ImageIcon("img/t5.png")
};

String[] image8 = new String[] {
"img/t1.png"//idk how to explain this one
};

@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnOne) {
String image9 = image8[0];//and this is what I struggle with
ImageIcon icon9 = new ImageIcon(image9);
icon9.getImage().flush();
image.setIcon(icon9);
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... java-swing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»