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