Я пытаюсь сделать так, чтобы у меня две панели в рамке. Один показывает 4 карты, а другой - кнопку. При нажатии кнопки четыре карты выбираются случайным образом. Карты не отображаются, когда я инициализирую программу или когда я нажимаю кнопку «Обновить». Может ли кто-нибудь объяснить, что я делаю неправильно, и что мне нужно сделать, чтобы исправить это?Компоненты JPanel исчезают после попытки их обновления
Вот мой код
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame{
public MyFrame(){
super("Random Cards");
CardPanel cardPanel = new CardPanel();
JPanel buttonPanel = new JPanel();
JButton jbtRefresh = new JButton("Refresh");
buttonPanel.add(jbtRefresh);
add(cardPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
jbtRefresh.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
cardPanel.refresh();
}
});
}
public static void main(String[] args){
MyFrame f = new MyFrame();
f.setDefaultCloseOperation(MyFrame.EXIT_ON_CLOSE);
f.setSize(500, 300);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public class CardPanel extends JPanel{
JLabel l1;
JLabel l2;
JLabel l3;
JLabel l4;
void CardPanel(){
refresh();
}
void refresh(){
l1 = new JLabel(new ImageIcon("image/card/" + (int)(1 + Math.random() * 54) + ".png"));
l2 = new JLabel(new ImageIcon("image/card/" + (int)(1 + Math.random() * 54) + ".png"));
l3 = new JLabel(new ImageIcon("image/card/" + (int)(1 + Math.random() * 54) + ".png"));
l4 = new JLabel(new ImageIcon("image/card/" + (int)(1 + Math.random() * 54) + ".png"));
removeAll();
add(l1);
add(l2);
add(l3);
add(l4);
repaint();
}
}
}
Вы не сможете получить доступ к переменной 'cardPanel' в' ActionListener'. Для этого 'cardPanel' должен быть' final' – Titus
Что вы говорите? 'final' - постоянный модификатор. –
@Malik Brahimi Он пытается получить доступ к переменной в «анонимном внутреннем классе». Для этого переменная должна быть «final» – Titus