【问题标题】:JPanel in JAppletJApplet 中的 JPanel
【发布时间】:2013-11-18 01:31:35
【问题描述】:

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

【问题讨论】:

  • 使用CardLayout
  • 我尝试过使用卡片布局。它进展不顺利你想要多少代码?它现在超过 1k 行
  • 发布sscce。详情请阅读链接。
  • 我在修剪代码时遇到问题
  • “我需要JFrame吗?所有示例似乎都有。”那么您显然还没有看到很多my examples。 ;)

标签: java swing jpanel japplet


【解决方案1】:

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

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

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

这是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);
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多