您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

这个JPanel代码好吗?单击按钮时不显示其他JPanel

这个JPanel代码好吗?单击按钮时不显示其他JPanel

这个JPanel代码好吗?

并非如此(很抱歉),您应该使用acardlayout来使其正常工作,请参阅如何使用CardLayout。

通过在构造函数中重新声明变量(panelpanel_1),您还可以隐藏变量。

您还应该避免使用null布局,像素完美布局是现代ui设计中的一种幻觉。有太多因素会影响组件的单个大小,您无法控制。Swing旨在与布局经理为核心一起工作,舍弃这些问题不会导致问题和问题的终结,您将花费越来越多的时间来尝试纠正问题

您也永远不会添加panel_1contentPane因此对其进行调用setVisible(假设变量阴影已修复)将不会执行任何操作

通常也建议不要直接从JFrame其他顶级容器扩展它,也不要在该类中添加任何新功能,而只能将自己锁定在一个用例中

因此,您可能会做更多类似的事情…

import java.awt.cardlayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

public class Test {

    public static void main(String[] args) {
        new test();
    }

    public test() {
        EventQueue.invokelater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | illegalaccessexception | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new Govinda());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class Govinda extends JPanel {

        /**
         *
         */
        private static final long serialVersionUID = 1L;
        private JPanel panel;
        private JPanel panel_1;

        /**
         * Create the frame.
         */
        public Govinda() {
            setBorder(new EmptyBorder(5, 5, 5, 5));
            setLayout(new cardlayout(0, 0));

            JPanel panel = new JPanel();
            add(panel, "name_273212774632866");

            JButton btnNewButton = new JButton("New button");
            btnNewButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    ((cardlayout) getLayout()).show(Govinda.this, "name_273214471684839");
                }
            });
            panel.add(btnNewButton);

            JPanel panel_1 = new JPanel();
            add(panel_1, "name_273214471684839");

            JLabel lblHaiiiiiiiii = new JLabel("HAIIIIIIIII");
            panel_1.add(lblHaiiiiiiiii);
        }
    }
}

您可能还会考虑对导航使用更多的“ 模型-视图- 控制器”方法,因此用于确定下一个视图的逻辑将由控制器根据模型的要求进行,例如,看看在监听器放置秉承传统(非中介)MVC模式

其他 2022/1/1 18:34:53 有502人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶