2

ここに画像の説明を入力

こんにちは、私は大学のミニプロジェクトを開発していました。これはライブラリ管理システムであり、Net-beans IDE を使用して Java スイングで行う必要があります。最初は手動コーディングをしていました。時間がかかる。

手動コーディングでは、メニュー バーとアイテムを含む単一の JFrame を作成し、実行されるすべてのアクションで、すべての Jpanel のコードを書きました。ファイルとコードが巨大になりました。そして紛らわしい。

今、あなたの助けが必要です。Menu A JPanel - ADD Book another Jpanel - でメイン JFrame を作成しました - Add Book の成功時 (デモ!、ADD Book で発生するアクションの場合)

私はアクションリスナーを作りました

addBook addbk = new addBook();
this.getContentPane().add(addbk);

このコードを書きました。意味がわかりません。友よ、Java の初心者として、私が勉強する必要があるのは

1.) アクションが実行された外部 Jpanel を表示および表示する方法 2.) 外部 JPanel でイベントが発生した場合に、同じルート JFrame に別の JPanel を表示する方法。

いわば、HTML の Iframe のようなものです。

http://compilr.com/abelkbil/openlib/OpenLibMainGUI.java

http://compilr.com/abelkbil/openlib/addBook.java

http://compilr.com/abelkbil/openlib/bookAdded.java

4

1 に答える 1

5

CardLayoutは、まさにこの状況に必要なものです。そして、あなたは初心者なので、 Java の命名規則を学び、それに固執してください。最初から正しい道を歩むことは常に良いことです。

これはあなたが見ることができる一例です:

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

public class CardLayoutExample
{
    private JPanel contentPane;
    private MyPanel panel1;
    private MyPanel panel2;
    private MyPanel panel3;
    private JComboBox choiceBox;
    private String[] choices = {
                                "Panel 1",
                                "Panel 2",
                                "Panel 3"
                               };

    private void displayGUI()
    {
        JFrame frame = new JFrame("Card Layout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setBorder(
            BorderFactory.createEmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new CardLayout());

        choiceBox = new JComboBox(choices);        

        panel1 = new MyPanel(contentPane
                , Color.RED.darker().darker(), this);
        panel2 = new MyPanel(contentPane
                , Color.GREEN.darker().darker(), this);
        panel3 = new MyPanel(contentPane
                , Color.DARK_GRAY, this);   

        contentPane.add(panel1, "Panel 1"); 
        contentPane.add(panel2, "Panel 2");
        contentPane.add(panel3, "Panel 3");         

        frame.getContentPane().add(choiceBox, BorderLayout.PAGE_START);
        frame.getContentPane().add(contentPane, BorderLayout.CENTER);       
        frame.pack();   
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public JComboBox getChoiceBox()
    {
        return choiceBox;
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new CardLayoutExample().displayGUI();
            }
        });
    }
}

class MyPanel extends JPanel 
{

    private JButton jcomp1;
    private JPanel contentPane;
    private Color backgroundColour;
    private JComboBox choiceBox;

    public MyPanel(JPanel panel, Color c, CardLayoutExample cle) 
    {   
        contentPane = panel;
        backgroundColour = c;
        choiceBox = cle.getChoiceBox();

        setOpaque(true);
        setBackground(backgroundColour);

        //construct components
        jcomp1 = new JButton ("Show New Panel");
        jcomp1.addActionListener( new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                String changeToPanel = (String) choiceBox.getSelectedItem();
                CardLayout cardLayout = (CardLayout) contentPane.getLayout();
                cardLayout.show(contentPane, changeToPanel);
            }
        });

        add(jcomp1);
    }

    @Override
    public Dimension getPreferredSize()
    {
        return (new Dimension(500, 500));
    }
}

それ以外の場合は、この例もご覧ください。

于 2012-09-05T15:13:22.537 に答える