[英]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.