java - JApplet 中的 JPanel

标签 java swing jpanel japplet

我需要在启动时打开一个 JPanel。我在那个面板上有一个按钮,可以打开另一个 JPanel,其中包含一个让我返回的按钮。我如何为这些按钮编写 Action 监听器。我进行了广泛的搜索。我需要 JFrame 吗?所有的例子似乎都有它。

最佳答案

无论您采用哪种方法,基本思想都是相同的。您需要根据您所在的位置知道该去哪里...

为此,这个简单的示例使用一个简单的导航界面来提供面板的移动控制,并使用一个 List 来维护组件的顺序。

您可以简单地使用某种队列,将下一个面板推到队列上,并在切换 View 时弹出最后一个面板。

这是 CardLayout 的快速简单示例

import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class SwitchPanel extends JApplet{

    private String currentView;
    private List<String> viewNames;

    @Override
    public void init() {
        final CardLayout cardLayout = new CardLayout();
        setLayout(cardLayout);

        Navigator navi = new Navigator() {

            @Override
            public void next() {
                int index = viewNames.indexOf(currentView);
                if (index > -1) {
                    index++;
                    if (index < viewNames.size()) {
                        currentView = viewNames.get(index);
                        cardLayout.show(getContentPane(), currentView);
                    }
                }
            }

            @Override
            public void previous() {
                int index = viewNames.indexOf(currentView);
                if (index > -1) {
                    index--;
                    if (index >= 0) {
                        currentView = viewNames.get(index);
                        cardLayout.show(getContentPane(), currentView);
                    }
                }
            }
        };

        MainPane mainPane = new MainPane(navi);
        LastPane lastPane = new LastPane(navi);

        viewNames = new ArrayList<>(2);
        viewNames.add("main");
        viewNames.add("last");

        add(mainPane, "main");
        add(lastPane, "last");
        currentView = "main";

        cardLayout.show(getContentPane(), "main");

    }

    public interface Navigator {

        public void next();
        public void previous();

    }

    public class MainPane extends JPanel {

        private Navigator navigator;

        public MainPane(Navigator navi) {
            this.navigator = navi;
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            JButton btn = new JButton("Next >");

            add(new JLabel("Main"), gbc);
            add(btn, gbc);
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    navigator.next();
                }
            });
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }
    }

    public class LastPane extends JPanel {

        private Navigator navigator;

        public LastPane(Navigator navi) {
            this.navigator = navi;
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            JButton btn = new JButton("< Previous");

            add(new JLabel("Last"), gbc);
            add(btn, gbc);
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    navigator.previous();
                }
            });
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }
    }

}

关于java - JApplet 中的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20038611/

相关文章:

java - MouseListener 发射速度不够快

java - JLabel 未出现在 JFrame 上

java - 重新创建一个 Jpanel

java - ImageIO只写入背景颜色,不写入图形

java - 将 Semaphore obj 置于等待状态的方法

java - 如何处理这个类的可见性问题?

java - 使用 Java 8 在文本文件中搜索字符串

java - Spring security 客户 token 增强器未调用

Java Swing 在 MigLayout 中添加图像代码似乎不起作用?

java - 在我的登录 JPanel 中添加 KeyListener