коммутационные панели - cardlayout - PullRequest
0 голосов
/ 29 апреля 2018

Я не могу пройти через панели.

Это строка:

cardLayout.show( cards, String.valueOf( "EXCEL_PANEL" ) );

Я вызываю метод show для EXCEL_PANEL, и он не появляется. Я чувствую, что это ослепительная ошибка.

Что я хочу в конце концов - что вся программа будет работать в одном и том же фреймворке, но я застрял на неделю с той же проблемой, которую не могу осознать.

И еще один вопрос. У кого-нибудь есть идеи, как создать событие, нажав кнопку «Вход», а не продолжить остальные в этом блоке? Потому что это только начало и это раздражает.

Это мой код класса карты-раскладки:

public class CardLayoutManager {

    JPanel cards;
    final static String LOGIN_PANEL = "Card with Login elements";
    final static String EXCEL_PANEL = "Card with Excel load file element";

    public void addComponentToPane(Container pane) throws IOException {

        LoginPanel login_p = new LoginPanel();
        ExcelPanel excel_p = new ExcelPanel();

        cards = new JPanel( new CardLayout() );
        cards.add( login_p, LOGIN_PANEL );
        cards.add( excel_p, EXCEL_PANEL );

        pane.add( cards, BorderLayout.CENTER );
        CardLayout cardLayout = (CardLayout) (cards.getLayout());
        cardLayout.show( cards, String.valueOf( login_p ) );

        login_p.login_btn.addActionListener( new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    boolean identification = login_p.LoginCheck();
                    if (!identification) {
                        JOptionPane.showMessageDialog( login_p, "Sorry, this user does not have access to the system.", "warning", JOptionPane.WARNING_MESSAGE );
                        login_p.ClearFields();
                    } else {
                        cardLayout.show( cards, String.valueOf( "EXCEL_PANEL" ) );
                    }
                } catch (SQLException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        } );
    }

    private static void createAndShowGUI() throws IOException {
        USTCFrame frame = new USTCFrame();
        CardLayoutManager demo = new CardLayoutManager();
        demo.addComponentToPane( frame.getContentPane() );
        frame.setVisible( true );
    }

    public static void main(String[] args) {

        try {
            UIManager.setLookAndFeel( "javax.swing.plaf.metal.MetalLookAndFeel" );
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

        /* Turn off metal's use of bold fonts */
        UIManager.put( "swing.boldMetal", Boolean.FALSE );

        //Schedule a job for the event dispatch thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                try {
                    createAndShowGUI();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } );
    }
}

1 Ответ

0 голосов
/ 29 апреля 2018

Вы не сказали, какие у вас классы USTCFrame, LoginPanel и ExcelPanel. Поэтому я предполагаю, что USTCFrame является подклассом JFrame и LoginPanel и ExcelPanel являются подклассами JPanel.

Ваши строки

cards = new JPanel( new CardLayout() );
cards.add( login_p, LOGIN_PANEL );
cards.add( excel_p, EXCEL_PANEL );

выглядит разумно. Но тогда ваша линия

 cardLayout.show( cards, String.valueOf( login_p ) );

не имеет смысла. Вместо этого должно быть

cardLayout.show( cards, LOGIN_PANEL );

потому что второй параметр cards.show(...) должен быть Строка, которую вы использовали в cards.add(...).

И по той же причине вместо

cardLayout.show( cards, String.valueOf( "EXCEL_PANEL" ) );

вы должны написать

cardLayout.show( cards, EXCEL_PANEL );
...