简体   繁体   English

不在JFrame中添加卡片布局

[英]Not adding Card Layout in JFrame

Can anyone see the code ? 谁能看到代码? I want to make a page that has a banner and a pannel in which cards will change on the requirement. 我要制作一个带有横幅和面板的页面,根据需要可以更改卡片。 I added the Banner in JFrame (That is working fine) but The problem is that " CardLayout Panel is not adding in the JFrame". 我在JFrame中添加了Banner(工作正常),但是问题是“ CardLayout Panel没有添加到JFrame中”。

Actually, I need this. 其实我需要这个

在此处输入图片说明

When button is pressed only card1 change to card2 but banner will remain same. 当按下按钮时,只有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);
    }
}

I want to make a page that has a banner and a pannel in which cards will change on the requirement. 我要制作一个带有横幅和面板的页面,根据需要可以更改卡片。

  1. your component aren't focusable, there is required some event (JButton, Swing Timer) for switching the view by using CardLayout 您的组件无法聚焦,需要使用一些事件(JButton,Swing Timer)来使用CardLayout切换视图

  2. for more info about CardLayout to read Oracle tutorial , for working code exampes, tons code examples are here 有关CardLayout的更多信息, 以阅读Oracle教程 ,有关工作代码示例,此处提供大量代码示例

  3. you code works without NullLayout (by set BorderLayout to parent JPanel), default LayoutManager for Jpanel is FlowLayout (accepts only getPreferredSize, childs aren't resizable with its parent/s) 您的代码可以在没有NullLayout的情况下工作(通过将BorderLayout设置为父JPanel),Jpanel的默认LayoutManager为FlowLayout(仅接受getPreferredSize,子项的父项无法调整大小)

  4. my question is for why reason is there code line basic_panel.add(card_Layout_panel, BorderLayout.CENTER); 我的问题是为什么为什么会有代码行basic_panel.add(card_Layout_panel, BorderLayout.CENTER); twice, and another ... 两次,另一个...

在此处输入图片说明

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();
            }
        });
    }
}

you're doing this basic_panel.add(card_Layout_panel,BorderLayout.CENTER); 您正在执行此basic_panel.add(card_Layout_panel,BorderLayout.CENTER); twice, hence the error. 两次,因此错误。 ( check before and after the welcome_authentication_panel_card ) (在welcome_authentication_panel_card之前和之后检查)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM