谁能看到代码?我要制作一个带有横幅和面板的页面,根据需要可以更改卡片。我在JFrame中添加了Banner(工作正常),但是问题是“ CardLayout Panel没有添加到JFrame中”。

Actually, I need this.

java - 不在JFrame中添加卡片布局-LMLPHP

当按下按钮时,只有card1更改为card2,但横幅将保持不变。

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class gui extends JFrame{

    private static final long serialVersionUID = 1L;

    JPanel
    basic_panel,
    card_Layout_panel,
    banner_panel,
    welcome_authenticaion_panel_card1;

    CardLayout basic2;

    JLabel
    logo_label,
    name_label;


    public gui(){

        server_login_gui();
        add(basic_panel);
        standard_gui();
    }

    public void server_login_gui(){


        basic_panel = new JPanel();
        basic_panel.setLayout(null);
        basic_panel.setBorder(BorderFactory.createLineBorder(Color.BLUE, 2));

        banner_panel = new JPanel();
        banner_panel.setLayout(null);
        banner_panel.setBorder(BorderFactory.createLineBorder(Color.GREEN, 2));
        banner_panel.setSize(680, 200);//(400,100,400,100);


        //////Banner inner things//////////////////////////////////////////////////
        logo_label = new JLabel("Logo");
        logo_label.setBounds(30,40,100,100);
        logo_label.setBorder(BorderFactory.createLineBorder(Color.YELLOW, 2));
        banner_panel.add(logo_label);

        name_label = new JLabel("        Name.....   ");
        name_label.setFont(new Font("Times new Roman", Font.BOLD | Font.ITALIC,25));
        name_label.setBounds(200,80,400,50);
        name_label.setBorder(BorderFactory.createLineBorder(Color.YELLOW, 2));
        banner_panel.add(name_label);
        ////////////////////////////////////////////////////////////////////////

//          basic_panel.add(banner_panel,BorderLayout.NORTH);


        ///////// Card Layout//////////////
        basic2 = new CardLayout();
        card_Layout_panel = new JPanel(basic2);
        card_Layout_panel.setBorder(BorderFactory.createLineBorder(Color.WHITE, 5));
        basic_panel.add(card_Layout_panel,BorderLayout.CENTER);

        welcome_authenticaion_panel_card1 = new JPanel();
        welcome_authenticaion_panel_card1.setLayout(null);
        welcome_authenticaion_panel_card1.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
        welcome_authenticaion_panel_card1.setSize(680, 200);//(400,100,400,100);
        welcome_authenticaion_panel_card1.setBounds(0,200,680,460);

        card_Layout_panel.add(welcome_authenticaion_panel_card1, "1");

        basic_panel.add(card_Layout_panel,BorderLayout.CENTER);


            /////////////////////////////////////////////////////////////////////////
    }

    public void standard_gui(){
        setSize(700,700);
        setTitle("System");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
}

最佳答案

我要制作一个带有横幅和面板的卡片的页面
  将根据要求进行更改。



您的组件无法聚焦,需要使用一些事件(JButton,Swing Timer)来使用CardLayout切换视图
有关CardLayout to read Oracle tutorial的更多信息,有关工作代码示例,请参见此处的吨代码示例
您的代码可以在没有NullLayout的情况下工作(通过将BorderLayout设置为父JPanel),Jpanel的默认LayoutManager为FlowLayout(仅接受getPreferredSize,子项的父项无法调整大小)
我的问题是为什么为什么会有两次代码行basic_panel.add(card_Layout_panel, BorderLayout.CENTER);,而另一个...


java - 不在JFrame中添加卡片布局-LMLPHP

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Gui extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel basic_panel, card_Layout_panel,
            banner_panel, welcome_authenticaion_panel_card1;
    private CardLayout basic2;
    private JLabel logo_label, name_label;

    public Gui() {
        server_login_gui();
        add(basic_panel);
        standard_gui();
    }

    public void server_login_gui() {

        basic_panel = new JPanel();
        basic_panel.setLayout(new BorderLayout(10, 10));
        basic_panel.setBorder(BorderFactory.createLineBorder(Color.BLUE, 2));
        banner_panel = new JPanel();
        //banner_panel.setLayout(null);
        banner_panel.setBorder(BorderFactory.createLineBorder(Color.GREEN, 2));
        banner_panel.setSize(680, 200);//(400,100,400,100);
        //////Banner inner things//////////////////////////////////////////////////
        logo_label = new JLabel("Logo");
        //logo_label.setBounds(30, 40, 100, 100);
        logo_label.setBorder(BorderFactory.createLineBorder(Color.YELLOW, 2));
        banner_panel.add(logo_label);
        name_label = new JLabel("        Name.....   ");
        name_label.setFont(new Font("Times new Roman", Font.BOLD | Font.ITALIC, 25));
        //name_label.setBounds(200, 80, 400, 50);
        name_label.setBorder(BorderFactory.createLineBorder(Color.YELLOW, 2));
        banner_panel.add(name_label);
        ////////////////////////////////////////////////////////////////////////
        basic_panel.add(banner_panel, BorderLayout.NORTH);
        ///////// Card Layout//////////////
        basic2 = new CardLayout();
        card_Layout_panel = new JPanel(basic2);
        card_Layout_panel.setBorder(BorderFactory.createLineBorder(Color.WHITE, 5));
        basic_panel.add(card_Layout_panel, BorderLayout.CENTER);
        welcome_authenticaion_panel_card1 = new JPanel();
        welcome_authenticaion_panel_card1.setLayout(null);
        welcome_authenticaion_panel_card1.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
        welcome_authenticaion_panel_card1.setSize(680, 200);//(400,100,400,100);
        //welcome_authenticaion_panel_card1.setBounds(0, 200, 680, 460);
        card_Layout_panel.add(welcome_authenticaion_panel_card1, "1");
        basic_panel.add(card_Layout_panel, BorderLayout.CENTER);
        /////////////////////////////////////////////////////////////////////////
    }

    public void standard_gui() {
        setSize(700, 700);
        setTitle("System");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Gui();
            }
        });
    }
}

10-05 21:19