簡體   English   中英

將一個JPanel添加到另一個JPanel

[英]Adding a JPanel to another JPanel

我想將多個JPanels添加到一個JPanel 然后,我要使用該JPanel並將其顯示在JTabbedPane的選項卡中。 我嘗試了幾次,但是蝕使我無法運行該程序。 它沒有顯示任何錯誤,但是由於某種原因該程序始終以調試模式運行。 代碼有問題嗎? (代碼有點長抱歉)

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

public class GuiApp {
    static class shelf implements Serializable {

        // declare books and variables
        static shelf[] book = new shelf[1000];
        Boolean overdue;
        Boolean checkedOut;
        int bookNum;
        String personName;
        String dueDate;
        int month;
        int date;
        int year;
        String dateCheckedOut;
        String bookName;
    }

    public static void main(String args[]) {
        // set L&F
        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception e) {

        }
        JFrame main = new JFrame();
        JTabbedPane tabs = new JTabbedPane();
        JPanel checkOutPanel = new JPanel(new GridBagLayout());
        JPanel checkInPanel = new JPanel(new GridBagLayout());
        JPanel checkedOutOverduePanel = new JPanel(new BorderLayout());
        JPanel assignNamesPanel = new JPanel(new BorderLayout());
        JPanel refreshSavePanel = new JPanel(new GridBagLayout());

        //misc
        Font f = new Font("Header", Font.BOLD, 24);

        GridBagConstraints gbc = new GridBagConstraints();

        //check out
        JLabel checkOutLabel = new JLabel("CheckOut");
        JLabel bookNumLabel = new JLabel("Book Number");
        JLabel personNameLabel = new JLabel("Person Name");

        final JTextField bookNumEntry = new JTextField(20);
        final JTextField personNameEntry = new JTextField(20);
        JButton checkOutButton = new JButton("Check out");

        checkOutLabel.setFont(f);

        gbc.gridx = 1;
        checkOutPanel.add(checkOutLabel,gbc);
        gbc.gridx = 0;
        gbc.gridy = 1;
        checkOutPanel.add(bookNumLabel,gbc);
        gbc.gridx = 1;
        checkOutPanel.add(bookNumEntry,gbc);
        gbc.gridx = 0;
        gbc.gridy = 2;
        checkOutPanel.add(personNameLabel,gbc);
        gbc.gridx = 1;
        checkOutPanel.add(personNameEntry,gbc);
        gbc.gridx = 2;
        checkOutPanel.add(checkOutPanel,gbc);
        tabs.addTab("Check Out", checkOutPanel);


        //check in
        JLabel checkInLabel = new JLabel("Check In");
        JLabel bookNumCheckInLabel = new JLabel("Book Number");
        final JTextField bookNumCheckIn = new JTextField(20);
        JButton checkInButton = new JButton("Check In");

        checkInLabel.setFont(f);

        gbc.gridx = 1;
        gbc.gridy = 0;
        checkInPanel.add(checkInLabel,gbc);
        gbc.gridx = 0;
        gbc.gridy = 1;
        checkInPanel.add(bookNumCheckInLabel,gbc);
        gbc.gridx = 1;
        checkInPanel.add(bookNumCheckIn,gbc);
        gbc.gridy = 2;
        checkInPanel.add(checkInButton,gbc);
        tabs.addTab("Check In",checkInPanel);


        //checked out overdue
        JPanel co = new JPanel(new GridBagLayout());
        JPanel co2 = new JPanel(new GridBagLayout());
        JPanel co3 = new JPanel();

        JLabel booksOutOverdueLabel = new JLabel("BOOKS OUT/OVERDUE");
        JLabel checkedOutLabel = new JLabel("Checked out");
        JLabel overdueLabel = new JLabel("Overdue");

        booksOutOverdueLabel.setFont(f);

        JTextArea checkedOutBooks = new JTextArea(50,53);
        JTextArea overdueBooks = new JTextArea(50,48);
        JScrollPane checkedOutTA = new JScrollPane(checkedOutBooks);
        JScrollPane overdueTA = new JScrollPane(overdueBooks);
        checkedOutTA.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        overdueTA.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        checkedOutBooks.setEditable(false);
        overdueBooks.setEditable(false);

        gbc.gridy = 0;
        co.add(checkedOutLabel,gbc);
        gbc.gridy = 1;
        co.add(checkedOutTA,gbc);
        gbc.gridy = 0;
        co2.add(overdueLabel,gbc);
        gbc.gridy = 1;
        co2.add(overdueTA,gbc);

        co3.add(booksOutOverdueLabel);

        checkedOutOverduePanel.add(co3,BorderLayout.NORTH);
        checkedOutOverduePanel.add(co,BorderLayout.WEST);
        checkedOutOverduePanel.add(co2,BorderLayout.EAST);

        tabs.addTab("Checked Out/Overdue",checkedOutOverduePanel);


        //assign book names
        JPanel an = new JPanel(new GridBagLayout());
        JPanel an2 = new JPanel();

        JLabel assignNamesLabel = new JLabel("Assign Book Names");
        JLabel bookNumberLabel = new JLabel("Book Number");
        JLabel nameOfBookLabel = new JLabel("Book Name");
        final JTextField bookNumber = new JTextField(20);
        final JTextField bookName = new JTextField(20);
        JButton assignName = new JButton("Assign");

        assignNamesLabel.setFont(f);

        gbc.gridy = 0;
        an.add(bookNumberLabel,gbc);
        an.add(bookNumber,gbc);
        gbc.gridy = 1;
        an.add(nameOfBookLabel,gbc);
        an.add(bookName,gbc);
        gbc.gridy = 2;
        gbc.gridx = 1;
        an.add(assignName,gbc);

        an2.add(assignNamesLabel);

        assignNamesPanel.add(an2,BorderLayout.NORTH);
        assignNamesPanel.add(an,BorderLayout.CENTER);

        tabs.addTab("Assign Book Names",assignNamesPanel);

        //refresh and save
        JButton saveButton = new JButton("Save");
        JButton refreshButton = new JButton("Refresh");
        refreshSavePanel.add(saveButton);
        refreshSavePanel.add(refreshButton);
        tabs.addTab("Refresh/save",refreshSavePanel);

        tabs.setTabPlacement(JTabbedPane.LEFT);

        main.add(tabs);
        main.setSize(1300,1100);
        main.setVisible(true);

    }
}

這是您要向自身添加面板的問題。 adding container's parent to itself

checkOutPanel.add(checkOutPanel,gbc);//error
tabs.addTab("Check Out", checkOutPanel);

您應該將組件添加到container.but您正在將container添加到container。可能您正在嘗試添加按鈕。

checkOutPanel.add(checkOutButton,gbc);
tabs.addTab("Check Out", checkOutPanel);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM