Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JComponent可见性的奇怪问题_Java_Swing_Jpanel_Jbutton - Fatal编程技术网

Java JComponent可见性的奇怪问题

Java JComponent可见性的奇怪问题,java,swing,jpanel,jbutton,Java,Swing,Jpanel,Jbutton,我正在使用Java中的Swing开发一个GUI项目,该程序通常运行良好。但是,在每个屏幕下,我都有一个back按钮,它调用前面屏幕的方法,并遍历包含当前屏幕上所有元素的ArrayList,并调用它们上的setVisible(false)。在运行程序时,如果单击一次“后退”按钮,则“后退”按钮可以正常工作,但如果返回屏幕,再次单击,则需要单击两次才能正常工作,然后单击四次,再单击八次,依此类推。我不知道发生了什么,也不知道它为什么会这样,因为我的代码中似乎没有任何东西能做到这一点。此外,有时,该按

我正在使用Java中的Swing开发一个GUI项目,该程序通常运行良好。但是,在每个屏幕下,我都有一个back按钮,它调用前面屏幕的方法,并遍历包含当前屏幕上所有元素的ArrayList,并调用它们上的setVisible(false)。在运行程序时,如果单击一次“后退”按钮,则“后退”按钮可以正常工作,但如果返回屏幕,再次单击,则需要单击两次才能正常工作,然后单击四次,再单击八次,依此类推。我不知道发生了什么,也不知道它为什么会这样,因为我的代码中似乎没有任何东西能做到这一点。此外,有时,该按钮会正确返回到上一屏幕,但会保持当前屏幕上的组件处于活动状态,就好像从未调用过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教程的部分。它也将被证明是一个更好的代码结构。您不应该使用静态变量,这表明设计不佳。