Как использовать макет карты?

Мне трудно понять, что такое макет карты. Я прочитал так много статей и реализовал этот небольшой пример, чтобы увидеть, как работает макет карты. Но я не могу понять некоторые методы (которые закомментированы). Может кто-нибудь, пожалуйста, помогите мне (я использую командную строку).

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class C_layout implements ActionListener
{
    JButton b2;
    JButton b1;
    JFrame f1;
    JPanel card1;
    JPanel card2;
    JPanel Jp;
    void Example()
    {
    f1=new JFrame("CardLayout Exercise");
    f1.setLocationRelativeTo(null);
    f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f1.setSize(500,500);
    f1.setVisible(true);

    Container cont=f1.getContentPane();
    cont.setLayout(null);

    Jp=new JPanel(new CardLayout()); //<-- How to implement card layout here (MAIN PANEL)
    f1.add(Jp);
    Jp.setLayout //<-- Not sure what means here ERROR
    card1=new JPanel(); // First panel
    Jp.add(card1);
    card2=new JPanel(); // Second panel
    Jp.add(card2);

    JLabel lb1=new JLabel("This is the first Panel");
    lb1.setBounds(250,100,100,30);
    card1.add(lb1);

    b1=new JButton("NEXT >>");
    b1.setBounds(350,400,100,30);
    b1.addActionListener(this);
    card1.add(b1);


    JLabel lb2=new JLabel("This is the second Panel");
    lb2.setBounds(250,100,100,30);
    card2.add(lb2);

    b2=new JButton("<< PREV");
    b2.setBounds(250,300,100,30);
    b2.addActionListener(this);
    card2.add(b2);
    }

    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==b1)
    {
    CardLayout cardLayout = (CardLayout) Jp.getLayout();
    cardLayout.show(card2,"2");
    }
    if(e.getSource()==b2)
    {
    // I still haven't implemented this action listener
    }
    }
}

class LayoutDemo1
{
    public static void main(String[] args)
    {
    C_layout c=new C_layout();
    c.Example();


    }
}

person Ashane Alvis    schedule 04.12.2014    source источник


Ответы (1)


cont.setLayout(null); это плохо, плохая идея, быстро теряйте...

Вам понадобится ссылка на ваш CardLayout, чтобы управлять им. Начните с определения поля экземпляра CardLayout...

private  CardLayout cardLayout;

Теперь создайте свой экземпляр CardLayout и примените его к своей панели...

cardLayout = new CardLayout();
Jp=new JPanel(cardLayout);

Этот...

Jp.setLayout //<-- Not sure what means here ERROR

ничего не делает, это недопустимое утверждение с точки зрения Java, на самом деле это метод, который должен принимать ссылку на LayoutManager, который вы хотите использовать, но поскольку вы уже сделали это при создании экземпляр Jp вам не нужен...

Вам понадобится какой-то способ идентифицировать компоненты, которые вы хотите показать, CardLayout делает это с помощью String имен, например...

card1=new JPanel(); // First panel
Jp.add(card1, "card1");
card2=new JPanel(); // Second panel
Jp.add(card2, "card2");

Теперь в вашем ActionListener вы хотите запросить CardLayout в show требуемый вид...

public void actionPerformed(ActionEvent e)
{
    if(e.getSource()==b1)
    {
        cardLayout.show(Jp1,"card2");
    } else if(e.getSource()==b2)
    {
        cardLayout.show(Jp1,"card1");
    }
}

Обратите внимание: для того, чтобы CardLayout#show работало, вам нужно указать ссылку на контейнер, которому назначен CardLayout, И имя представления, которое вы хотите отобразить.

Дополнительные сведения см. в разделе Как использовать CardLayout.

person MadProgrammer    schedule 04.12.2014
comment
Можете ли вы объяснить немного больше на примере, как показать кадр, он дает мне пустой кадр. Я не понял, что такое CardLayout#show - person Ashane Alvis; 04.12.2014
comment
Мне нужна небольшая помощь, пожалуйста, позаботьтесь об этом. Спасибо - person Ashane Alvis; 04.12.2014
comment
А мне надо поспать ;). Использование нулевого макета - ваша первая проблема, и то, что вы не добавляете Jp ни к чему, похоже, ваши проблемы - person MadProgrammer; 04.12.2014
comment
Извините, здесь ярко светит солнце. Спасибо за помощь снова :) - person Ashane Alvis; 05.12.2014