我的程序最初旨在显示 2 个面板,其中包含文件 Z_pic1.png 和 Z_pic2.png 中的不同图像。按下任何键时,面板上的显示应交换交换。它不显示 2 个图像,而仅显示 Z_pic2,png 中的图像。任何按键都没有效果。想找出问题所在。
我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Z_LayeredPaneExample1_2 extends JFrame {
private JPanel[] panels;
private JLabel[] imageLabels;
public Z_LayeredPaneExample1_2() {
setTitle("Panel Swapper");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);
// Create the panel array
panels = new JPanel[2];
imageLabels = new JLabel[2];
// Load the images
ImageIcon image1 = new ImageIcon("Z_pic1.png");
ImageIcon image2 = new ImageIcon("Z_pic2.png");
// Create the panels and add them to the frame
createPanels(image1, image2);
// Add a key listener to swap the images when a key is pressed
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
swapPanels();
}
@Override
public void keyReleased(KeyEvent e) {
}
});
setVisible(true);
}
private void createPanels(ImageIcon image1, ImageIcon image2) {
// Create the panels and set their layout and background color
for (int i = 0; i < panels.length; i++) {
panels[i] = new JPanel();
panels[i].setLayout(new BorderLayout());
panels[i].setBackground(Color.WHITE);
// Add the image to the panel
imageLabels[i] = new JLabel(i == 0 ? image1 : image2);
panels[i].add(imageLabels[i], BorderLayout.CENTER);
// Add the panel to the frame
add(panels[i], BorderLayout.WEST);
}
}
private void swapPanels() {
// Swap the images in the panels
ImageIcon temp = (ImageIcon) imageLabels[0].getIcon();
imageLabels[0].setIcon(imageLabels[1].getIcon());
imageLabels[1].setIcon(temp);
}
public static void main(String[] args) {
new Z_LayeredPaneExample1_2();
}
}
问题是您在
panels[0]
实例中的同一位置 panels[1]
添加了面板
BorderLayout.WEST
和 JFrame
。当 BorderLayout
中的一个位置被填充时,当为该确切位置设置新值时,它会被覆盖。这就是为什么您只能看到一个面板,因此只能看到一张图像。
您可以使用类似的技巧,例如
add(panels[i], i == 0 ? BorderLayout.WEST : BorderLayout.EAST);
将第一个面板添加到
WEST
区域,将第二个面板添加到 EAST
区域。之后,当您按下某个键时,您将看到图像交换位置。