Java 使用JButton更改JPanel的问题

Java 使用JButton更改JPanel的问题,java,swing,jpanel,layout-manager,cardlayout,Java,Swing,Jpanel,Layout Manager,Cardlayout,我有个问题!我正在制作一个包含多个面板的应用程序。我使用的是卡片布局,在切换到其他面板时没有这个问题。我有一个JButton(在一个名为optionsPanel的面板中),它应该首先更改为面板“panelCargando”(它有两个JLabel,一个带有文本,另一个带有方形动画GIF(72x72)),然后使用Twitter4J查看另一个名为tweetsPanel的JPanel中显示的一些信息。问题是,当我按下按钮时,它不会隐藏其他面板并使“panelCargando”可见,它会将选项面板保留在前

我有个问题!我正在制作一个包含多个面板的应用程序。我使用的是卡片布局,在切换到其他面板时没有这个问题。我有一个JButton(在一个名为optionsPanel的面板中),它应该首先更改为面板“panelCargando”(它有两个JLabel,一个带有文本,另一个带有方形动画GIF(72x72)),然后使用Twitter4J查看另一个名为tweetsPanel的JPanel中显示的一些信息。问题是,当我按下按钮时,它不会隐藏其他面板并使“panelCargando”可见,它会将选项面板保留在前面,当它完成信息查找时,它会将两个面板放在一起。下面是我在JButton的ActionListener中使用的代码:

btnNewButton_2.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent arg0) 
        {
            mainPanel.setVisible(false);
            optionsPanel.setVisible(false);
            tweetsPanel.setVisible(false);
            panelCargando.setVisible(true);

            long lCursor = -1;
            IDs friendsIDs;
            try
            {
                friendsIDs = twitter.getFriendsIDs(twitter.getId(), lCursor);
                System.out.println(twitter.showUser(twitter.getId()).getName());
                do
                {
                  for (long i : friendsIDs.getIDs())
                  {
                      if(textArea.getText().isEmpty())
                      {
                          textArea.setText(textArea.getText() + "ID de usuario: " + i +
                          "\nNombre de usuario: @" + twitter.showUser(i).getScreenName() + 
                          "\nNombre: " + twitter.showUser(i).getName() +
                          "\nDescripción: " + twitter.showUser(i).getDescription() +
                          "\nImagen de perfil: " + twitter.showUser(i).getProfileImageURLHttps() +
                          "\nSigue a " + twitter.showUser(i).getFriendsCount() + " usuarios" + 
                          "\nTiene " + twitter.showUser(i).getFollowersCount() + " seguidores\n");
                      }
                      else
                      {
                          textArea.setText(textArea.getText() + "\nID de usuario: " + i +
                          "\nNombre de usuario: @" + twitter.showUser(i).getScreenName() + 
                          "\nNombre: " + twitter.showUser(i).getName() +
                          "\nDescripción: " + twitter.showUser(i).getDescription() +
                          "\nImagen de perfil: " + twitter.showUser(i).getProfileImageURLHttps() +
                          "\nSigue a " + twitter.showUser(i).getFriendsCount() + " usuarios" + 
                          "\nTiene " + twitter.showUser(i).getFollowersCount() + " seguidores\n");
                      }  
                   }
                }
                while(friendsIDs.hasNext());

                frame.setTitle("Información sobre seguidores de " + twitter.showUser(twitter.getId()).getName() + " - BISmart");
                panelCargando.setVisible(false);
                tweetsPanel.setVisible(true);
                tweetsPanel.setFocusable(true);
                tweetsPanel.requestFocusInWindow();
最后,我看到了“tweetsPanel”面板的文本区域和前面的“panelCargando”。在我放在这里的代码中,我修改了它并添加了“panelCargando.setVisible(false)”,但这样我根本看不到它

有人能帮我吗?如果不清楚,请告诉我!谢谢大家!

编辑

现在代码是这个,但我一直有相同的问题。即使我执行“layout.show(frame.getContentPane(),“panelCargando”),面板也不会显示。我补充说:

layout = new CardLayout(0,0);
frame.getContentPane().setLayout(layout);
frame.getContentPane().add(splashPanel, "splashPanel");
frame.getContentPane().add(newTweetPanel, "newTweetPanel");
frame.getContentPane().add(mainPanel, "mainPanel");
frame.getContentPane().add(tweetsPanel, "tweetsPanel");
frame.getContentPane().add(optionsPanel,"optionsPanel");
frame.getContentPane().add(panelCargando, "panelCargando");
执行的操作如下所示:

public void actionPerformed(ActionEvent arg0) 
        {
            layout.show(frame.getContentPane(), "panelCargando");
            long lCursor = -1;
            IDs friendsIDs;
            try
            {
                friendsIDs = twitter.getFriendsIDs(twitter.getId(), lCursor);
                System.out.println(twitter.showUser(twitter.getId()).getName());
                do
                {

                  for (long i : friendsIDs.getIDs())
                  {
                      if(textArea.getText().isEmpty())
                      {
                          textArea.setText(textArea.getText() + "ID de usuario: " + i +
                          "\nNombre de usuario: @" + twitter.showUser(i).getScreenName() + 
                          "\nNombre: " + twitter.showUser(i).getName() +
                          "\nDescripción: " + twitter.showUser(i).getDescription() +
                          "\nImagen de perfil: " + twitter.showUser(i).getProfileImageURLHttps() +
                          "\nSigue a " + twitter.showUser(i).getFriendsCount() + " usuarios" + 
                          "\nTiene " + twitter.showUser(i).getFollowersCount() + " seguidores\n");
                      }
                      else
                      {
                          textArea.setText(textArea.getText() + "\nID de usuario: " + i +
                          "\nNombre de usuario: @" + twitter.showUser(i).getScreenName() + 
                          "\nNombre: " + twitter.showUser(i).getName() +
                          "\nDescripción: " + twitter.showUser(i).getDescription() +
                          "\nImagen de perfil: " + twitter.showUser(i).getProfileImageURLHttps() +
                          "\nSigue a " + twitter.showUser(i).getFriendsCount() + " usuarios" + 
                          "\nTiene " + twitter.showUser(i).getFollowersCount() + " seguidores\n");
                      }  
                   }
                }
                while(friendsIDs.hasNext());

                frame.setTitle("Información sobre seguidores de " + twitter.showUser(twitter.getId()).getName() + " - BISmart");
                layout.show(frame.getContentPane(), "tweetsPanel");
            } 

您说您使用的是
CardLayout
,但随后您手动将
visible
正确设置为
true/false
!!!!为什么会这样?此外,如果您使用,您在
JButton
操作执行(…)
中写入了
卡交换部分的确切位置。我无法在代码段的这一部分的任何地方看到任何
CardLayout
方法,如
first/last/previous/next/show
。我已经编辑了代码,谢谢,但仍然不起作用,请查看。如果您能提供一个可运行的小示例,以了解问题的原因,我们将不胜感激。如果可能:-)为了更快地获得更好的帮助,请发布一个(最简单的完整的可验证示例)。很抱歉,您被淘汰了。我使用CardLayout和show()方法使它按您所说的那样工作。谢谢大家!!