有一个J框架,我在其中放置了2个面板,两个面板的卡布局

按图像J框架有2个面板,一个是

面板窗格>>在这里我要调用panel1,panel2,panel3,其中所有3个面板都有一些控件,例如JtextField,jComboBox等。

按钮窗格>>在此面板中,下一个有一个按钮,当按下next时有一个按钮返回(如果面板显示“ panel1”,则显示为panel1控件)

像这样

代码如下



    package Code;

/**
 *
 * @author Rohini
 */

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

public class InvoicePage extends JFrame implements ActionListener{

    JLabel newInvoic, invoiceNol, invoiceNo;
    JButton clinfoNext, payentryNext, termentryNext;
    JButton clinfoBack, payentryBack, termentryBack;


    JPanel buttonPane, clinfoBPane, payentryBPane, termentryBPane;
    JPanel panelpane, client_info, invoice_entry, term_entry;

    Container c = this.getContentPane();

    CardLayout cardmain, cardbutton;

    Font head = new Font("Times New Roman",Font.BOLD,20);
    Font subheadb = new Font("Times New Roman",Font.BOLD,14);
    Font subheadp = new Font("Times New Roman",Font.PLAIN,14);

    public InvoicePage() throws HeadlessException {

        super("Thane Bharat Sahakari Bank : New Invoice");

    //  initialization of variables
        cardmain  = new CardLayout();
        cardbutton = new CardLayout();

        newInvoic = new JLabel("New Invoice");
        invoiceNol = new JLabel("Invoice No");
        invoiceNo = new JLabel("DB Value of id");

        clinfoNext = new JButton(" Next > > ");
        payentryNext = new JButton(" Next > > ");
        termentryNext = new JButton(" Next > > ");
        clinfoBack = new JButton(" < < Back ");
        payentryBack = new JButton(" < < Back ");
        termentryBack = new JButton(" < < Back ");

        buttonPane = new JPanel(cardbutton);
        clinfoBPane = new JPanel(null);
        payentryBPane = new JPanel(null);
        termentryBPane = new JPanel(null);

        panelpane = new JPanel(cardmain);
        client_info = new clientInfo();
        invoice_entry = new discription();
        term_entry = new termentry();

    //  setting properties of variabels

        panelpane.add(client_info,"Client_info");
        panelpane.add(invoice_entry,"invoice_entry");
        panelpane.add(term_entry,"term_entry");

        buttonPane.add(clinfoBPane,"clinfoBpane");
        buttonPane.add(payentryBPane,"payentryBPane");
        buttonPane.add(termentryBPane,"termentryBPane");

        clinfoBPane.add(clinfoBack);
        clinfoBPane.add(clinfoNext);
        payentryBPane.add(payentryBack);
        payentryBPane.add(payentryNext);
        termentryBPane.add(termentryBack);
        termentryBPane.add(termentryNext);

        newInvoic.setFont(head);
        invoiceNol.setFont(subheadb);
        invoiceNo.setFont(subheadp);

        clinfoNext.addActionListener(this);
        payentryNext.addActionListener(this);
        termentryNext.addActionListener(this);
        clinfoBack.addActionListener(this);
        payentryBack.addActionListener(this);
        termentryBack.addActionListener(this);

    //  setting Bounds
        Bounds(0,0);

    //  Adding Components
        c.add(newInvoic);
        c.add(invoiceNol);
        c.add(invoiceNo);
        c.add(buttonPane);
        c.add(panelpane);


    //  Form properties
        cardbutton.show(buttonPane,"clinfoBpane");
        cardmain.show(panelpane,"Client_info") ;
        c.setLayout(null);
        c.setBackground(Color.WHITE);
        //clinfoBPane.setBackground(Color.WHITE);


        this.setResizable(true);
        this.setVisible(true);
        setDefaultCloseOperation(3);
        System.out.println("");
    }
    public void Bounds( int i, int j ){
        if(i == 0){
            newInvoic.setBounds(250,0,150,30);
            invoiceNol.setBounds(400,30,100,25);
            invoiceNo.setBounds(500,30,100,25);

            buttonPane.setBounds(0,410,610,50);
            panelpane.setBounds(0,50,610,350);
            clinfoNext.setBounds(430,5,150,30);
            clinfoBack.setBounds(25,5,150,30);
            this.setSize(625,505);
            this.setLocation(300,150);
        }
        else if(i == 1){
            newInvoic.setBounds(350,0,150,30);
            invoiceNol.setBounds(600,30,100,25);
            invoiceNo.setBounds(700,30,100,25);

            buttonPane.setBounds(0,440,830,50);
            panelpane.setBounds(0,50,815,390);
            if(j == 0){
                payentryNext.setBounds(640,5,150,30);
                payentryBack.setBounds(30,5,150,30);
            }
            else if(j == 1){
                termentryNext.setBounds(640,5,150,30);
                termentryBack.setBounds(30,5,150,30);
            }
            this.setSize(830,525);
            this.setLocation(200,100);
        }
        else{

        }
    }
        public void actionPerformed(ActionEvent ae){

            if(ae.getSource() == clinfoNext){
                cardbutton.show(buttonPane,"payentryBPane");
                cardmain.show(panelpane,"invoice_entry") ;
                Bounds(1,0);

            }
            else if(ae.getSource() == clinfoBack){
                this.dispose();
                Mainfrm mf = new Mainfrm();
                mf.setVisible(true);
            }
            else if((ae.getSource() == payentryNext)){
                Bounds(1,1);
                cardbutton.show(buttonPane,"termentryBPane");
                cardmain.show(panelpane,"term_entry") ;
            }
            else if(ae.getSource() == payentryBack){
                Bounds(0,0);
                cardbutton.show(buttonPane,"clinfoBpane");
                cardmain.show(panelpane,"Client_info") ;
            }
            else if(ae.getSource() == termentryBack){
                cardbutton.show(buttonPane,"payentryBPane");
                cardmain.show(panelpane,"invoice_entry") ;
                Bounds(1,0);
            }
            else if(ae.getSource() == termentryNext){
                JOptionPane.showConfirmDialog(this,"Are you sure that the invoice is over","Confirmation", JOptionPane.YES_NO_CANCEL_OPTION, 0);

            }
            else{

            }
        }
    public static void main(String []avi){

         new InvoicePage();
    }
}

最佳答案

是!!我得到了答案

实际上,外部面板变量需要具有公共范围



(请参见上面的代码)

JPanel panelpane, client_info, invoice_entry, term_entry;


我已经创建了JPanel的实例并通过外部面板将其初始化,即

   client_info = new clientInfo();
        invoice_entry = new discription();
        term_entry = new termentry();


而不是面板正在做

 JPanel panelpane, client_info, invoice_entry, term_entry;


通过尝试解决这个问题来解决

  JPanel panelpane;
        clientInfo client_info;
        discription invoice_entry;


这样我们就可以给actionListner

10-05 21:13