gpt4 book ai didi

java - CardLayout 在最后一张卡上关闭

转载 作者:行者123 更新时间:2023-12-01 07:10:15 28 4
gpt4 key购买 nike

所以我有一个带有 CardLayout 的 JPanel。正如预期的那样,此 CardLayout 管理框架中面板的切换。切换是通过两个按钮完成的:“后退”和“下一步”。

我想知道当它位于最后一张上时是否有办法关闭整个应用程序(即调用System.exit(0))并且“再次按下“下一步”。

我到处寻找解决方案,但找不到任何东西。

问题是:我不知道如何检查哪一个是最后一个。

这是我的代码的监听器摘录:

public void actionPerformed(ActionEvent arg0) {
CardLayout l = (CardLayout) holder.getLayout();
if(arg0.getSource() == opt[1]){ //opt[1] is the "Next" button


//Insert if statement here to check if
//the CardLayout is on the last card
{
System.exit(0);
} else {
l.next(holder); //holder is the JPanel with the CardLayout
}
}
}

最佳答案

怎么样 dispose() 继承自 Window 确保设置:

jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

<罢工>

JFrame frame = ...

// ...

frame.setVisible(false); // hide the GUI
frame.dispose(); // destroy and release the GUI resources
<小时/>

例如:

enter image description here

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CardLayoutGUI
{
private JFrame frame;
private JButton btnBack;
private JButton btnNext;
private CardLayout cLayout;
private JPanel panUp;
private JPanel panDown;

private static final String[] cards =
{"card1", "card2", "card3", "card4", "card5"};

private int currentCard = 0;

public void init()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
((JPanel)frame.getContentPane()).setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

btnBack = new JButton("Back");
btnNext = new JButton("Next");

btnBack.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
btnNext.setText("Next");
currentCard--;
cLayout.show(panUp, cards[currentCard]);
if(currentCard == 0) btnBack.setVisible(false);
}
});

btnNext.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
btnBack.setVisible(true);
currentCard++;

if(currentCard == cards.length - 1) // last card
{
btnNext.setText("Exit");
cLayout.show(panUp, cards[currentCard]);
}
else if(currentCard >= cards.length)
{
frame.setVisible(false);
frame.dispose();
}
else
{
cLayout.show(panUp, cards[currentCard]);
}
}
});


cLayout = new CardLayout();
panUp = new JPanel(cLayout);
panDown = new JPanel();
frame.add(panUp, BorderLayout.CENTER);
frame.add(panDown, BorderLayout.SOUTH);
panDown.add(btnBack);
panDown.add(btnNext);

for(int i = 0; i < cards.length; i++) createPanels(panUp, cards[i]);

frame.pack();
frame.setLocationRelativeTo(null);

btnBack.setVisible(false);
}

public void showGUI()
{
frame.setVisible(true);
}

private void createPanels(JPanel container, String label)
{
JPanel pan = new JPanel();
pan.add(new JLabel(label));
container.add(pan, label);
}

public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
CardLayoutGUI clg = new CardLayoutGUI();
clg.init();
clg.showGUI();
}
});
}
}

关于java - CardLayout 在最后一张卡上关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799834/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com