Java JComponent可见性的奇怪问题
我正在使用Java中的Swing开发一个GUI项目,该程序通常运行良好。但是,在每个屏幕下,我都有一个back按钮,它调用前面屏幕的方法,并遍历包含当前屏幕上所有元素的ArrayList,并调用它们上的setVisible(false)。在运行程序时,如果单击一次“后退”按钮,则“后退”按钮可以正常工作,但如果返回屏幕,再次单击,则需要单击两次才能正常工作,然后单击四次,再单击八次,依此类推。我不知道发生了什么,也不知道它为什么会这样,因为我的代码中似乎没有任何东西能做到这一点。此外,有时,该按钮会正确返回到上一屏幕,但会保持当前屏幕上的组件处于活动状态,就好像从未调用过setVisible(false)一样。下面的代码表示我的项目的一般结构。它在做什么导致了这个问题Java JComponent可见性的奇怪问题,java,swing,jpanel,jbutton,Java,Swing,Jpanel,Jbutton,我正在使用Java中的Swing开发一个GUI项目,该程序通常运行良好。但是,在每个屏幕下,我都有一个back按钮,它调用前面屏幕的方法,并遍历包含当前屏幕上所有元素的ArrayList,并调用它们上的setVisible(false)。在运行程序时,如果单击一次“后退”按钮,则“后退”按钮可以正常工作,但如果返回屏幕,再次单击,则需要单击两次才能正常工作,然后单击四次,再单击八次,依此类推。我不知道发生了什么,也不知道它为什么会这样,因为我的代码中似乎没有任何东西能做到这一点。此外,有时,该按
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MAIN {
static JFrame frame;
static JPanel panel;
public static void main(String [] args) {
mainScreen();
}
public static void mainScreen() {
JButton newScreen = new JButton("Next Screen");
frame = new JFrame();
panel = new JPanel();
panel.setBounds(0,0,1920,1080);
panel.setBackground(Color.cyan);
newScreen.setBounds(50, 500, 100, 500);
newScreen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
newScreen.setVisible(false);
JButton returnButton = new JButton("return");
returnButton.setBounds(50, 50, 100, 100);
panel.add(returnButton);
returnButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
returnButton.setVisible(false);
mainScreen();
}
});
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.add(newScreen);
frame.add(panel);
frame.setSize(1920,1080);
frame.setLayout(null);
frame.setVisible(true);
}
}
“遍历数组列表”什么数组列表?1) 为了更快地获得更好的帮助,请添加或。2) 使用缩进代码行和代码块的逻辑和一致形式。缩进的目的是使代码的流程更易于遵循!大多数IDE都有专门用于格式化代码的键盘快捷键。3) Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。。。。而是使用布局管理器,或与布局填充和边框一起使用。4) 请回答问题以扩展或更新信息,而不是从头开始。上一个问题中的建议是:1)使用大写字符开始类名,2)遵循JDK的类名标准。你知道JDK中有哪些类是完全大写的吗??为什么你的类名是完全大写的???这些代码所做的就是不断创建新的JFrames。不要每次返回帧时都创建新帧。相反,您可能需要使用
卡片布局
。它将允许您交换现有框架上的面板。有关更多信息和工作示例,请阅读上Swing教程的部分。它也将被证明是一个更好的代码结构。您不应该使用静态变量,这表明设计不佳。“遍历ArrayList”什么数组列表?1) 为了更快地获得更好的帮助,请添加或。2) 使用缩进代码行和代码块的逻辑和一致形式。缩进的目的是使代码的流程更易于遵循!大多数IDE都有专门用于格式化代码的键盘快捷键。3) Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。。。。而是使用布局管理器,或与布局填充和边框一起使用。4) 请回答问题以扩展或更新信息,而不是从头开始。上一个问题中的建议是:1)使用大写字符开始类名,2)遵循JDK的类名标准。你知道JDK中有哪些类是完全大写的吗??为什么你的类名是完全大写的???这些代码所做的就是不断创建新的JFrames。不要每次返回帧时都创建新帧。相反,您可能需要使用卡片布局
。它将允许您交换现有框架上的面板。有关更多信息和工作示例,请阅读上Swing教程的部分。它也将被证明是一个更好的代码结构。您不应该使用静态变量,这表明设计不佳。