Java 与GridBagLayout不符的组件
我试图让GridBagLayout在一个框架中放置4个面板,在框架的每个象限中放置一个面板。我肯定我误解了布局管理器的一些基本内容,但我不确定是什么。以下是我的GUI代码:Java 与GridBagLayout不符的组件,java,swing,jtable,jscrollpane,gridbaglayout,Java,Swing,Jtable,Jscrollpane,Gridbaglayout,我试图让GridBagLayout在一个框架中放置4个面板,在框架的每个象限中放置一个面板。我肯定我误解了布局管理器的一些基本内容,但我不确定是什么。以下是我的GUI代码: import java.awt.ScrollPane; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; impor
import java.awt.ScrollPane;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Insets;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.border.*;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
/**
* GUI to interact with BookList
*/
public class GUI extends JPanel implements ActionListener
{
//// Main Panel ////
////////////////////
private JPanel mainPanel;
//// Border ////
////////////////
private Border loweredBorder;
//// Input Panel ////
/////////////////////
private JPanel inputPanel;
private JLabel titleLabel;
private JTextField titleField;
private JLabel authorLabel;
private JTextField authorField;
private JLabel genreLabel;
private JTextField genreField;
private JLabel priceLabel;
private JTextField priceField;
private JLabel reviewLabel;
private JTextField reviewField;
private JButton addBookButton;
//// Search Panel ////
//////////////////////
private JPanel searchPanel;
private JLabel searchLabel;
private JTextField searchField;
private JButton searchButton;
//// Output Panel ////
//////////////////////
private JPanel outputPanel;
private JLabel titleDisplayLabel;
private JLabel titleOutputLabel;
private JLabel authorDisplayLabel;
private JLabel authorOutputLabel;
private JLabel genreDisplayLabel;
private JLabel genreOutputLabel;
private JLabel priceDisplayLabel;
private JLabel priceOutputLabel;
private JLabel reviewDisplayLabel;
private JLabel reviewOutputLabel;
private JButton editBookButton;
private JButton deleteBookButton;
//// Display Panel ////
//////////////////////////
private JPanel displayPanel;
private JScrollPane listPanel;
private JButton displayButton;
//// BookList ////
//////////////////
private BookList bl;
/**
* Inputs and buttons for interacting with BookList
*/
public GUI()
{
// Instantiate a BookList
// TODO: Make BookList length a parameter
bl = new BookList( 5 );
loweredBorder = BorderFactory.createBevelBorder( BevelBorder.LOWERED );
//// Instantiate and configure Main Panel ////
////////////////////////////////////////////////
GridBagLayout mainPanelLayout = new GridBagLayout();
this.setLayout( mainPanelLayout );
//// Instantiate and configure Input Panel ////
///////////////////////////////////////////////
inputPanel = new JPanel( );
GridBagLayout inputPanelGridBag = new GridBagLayout();
GridBagConstraints inputPanelCons = new GridBagConstraints();
inputPanelCons.gridx = 0;
inputPanelCons.gridy = 0;
inputPanelCons.gridheight = 6;
inputPanelCons.gridwidth = 2;
inputPanelCons.weightx = 0.25;
inputPanelCons.weighty = 0.25;
inputPanelCons.ipadx = 10;
inputPanelCons.ipady = 10;
inputPanelCons.anchor = GridBagConstraints.FIRST_LINE_START;
inputPanelCons.fill = GridBagConstraints.BOTH;
inputPanelCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( inputPanel, inputPanelCons );
inputPanel.setBorder(
BorderFactory.createTitledBorder( loweredBorder,
"Add/Edit Book") );
inputPanel.setLayout( inputPanelGridBag );
// Title Input Label
titleLabel = new JLabel( "Title:", JLabel.TRAILING );
GridBagConstraints titleLabelCons = new GridBagConstraints();
titleLabelCons.gridx = 0;
titleLabelCons.gridy = 0;
titleLabelCons.ipadx = 10;
titleLabelCons.ipady = 10;
titleLabelCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( titleLabel, titleLabelCons );
inputPanel.add( titleLabel );
// Title Input Field
titleField = new JTextField( 16 );
titleLabel.setLabelFor( titleField );
GridBagConstraints titleFieldCons = new GridBagConstraints();
titleFieldCons.gridx = 1;
titleFieldCons.gridy = 0;
titleFieldCons.ipadx = 10;
titleFieldCons.ipady = 10;
titleFieldCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( titleField, titleFieldCons );
inputPanel.add( titleField );
// Author Input Label
authorLabel = new JLabel( "Author:", JLabel.TRAILING );
GridBagConstraints authorLabelCons = new GridBagConstraints();
authorLabelCons.gridx = 0;
authorLabelCons.gridy = 1;
authorLabelCons.ipadx = 10;
authorLabelCons.ipady = 10;
authorLabelCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( authorLabel, authorLabelCons );
inputPanel.add( authorLabel );
// Author Input Field
authorField = new JTextField( 16 );
GridBagConstraints authorFieldCons = new GridBagConstraints();
authorFieldCons.gridx = 1;
authorFieldCons.gridy = 1;
authorFieldCons.ipadx = 10;
authorFieldCons.ipady = 10;
authorFieldCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( authorField, authorFieldCons );
authorLabel.setLabelFor( authorField );
inputPanel.add( authorField );
// Genre Input Label
genreLabel = new JLabel( "Genre:", JLabel.TRAILING );
GridBagConstraints genreLabelCons = new GridBagConstraints();
genreLabelCons.gridx = 0;
genreLabelCons.gridy = 2;
genreLabelCons.ipadx = 10;
genreLabelCons.ipady = 10;
genreLabelCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( genreLabel, genreLabelCons );
inputPanel.add( genreLabel );
// Genre Input Field
genreField = new JTextField( 16 );
GridBagConstraints genreFieldCons = new GridBagConstraints();
genreFieldCons.gridx = 1;
genreFieldCons.gridy = 2;
genreFieldCons.ipadx = 10;
genreFieldCons.ipady = 10;
genreFieldCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( genreField, genreFieldCons );
genreLabel.setLabelFor( genreField );
inputPanel.add( genreField );
// Price Input Label
priceLabel = new JLabel( "Price:", JLabel.TRAILING );
GridBagConstraints priceLabelCons = new GridBagConstraints();
priceLabelCons.gridx = 0;
priceLabelCons.gridy = 3;
priceLabelCons.ipadx = 10;
priceLabelCons.ipady = 10;
priceLabelCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( priceLabel, priceLabelCons );
inputPanel.add( priceLabel );
// Price Input Field
priceField = new JTextField( 16 );
GridBagConstraints priceFieldCons = new GridBagConstraints();
priceFieldCons.gridx = 1;
priceFieldCons.gridy = 3;
priceFieldCons.ipadx = 10;
priceFieldCons.ipady = 10;
priceFieldCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( priceField, priceFieldCons );
priceLabel.setLabelFor( priceField );
inputPanel.add( priceField );
// Review Input Label
reviewLabel = new JLabel( "Review:", JLabel.TRAILING );
GridBagConstraints reviewLabelCons = new GridBagConstraints();
reviewLabelCons.gridx = 0;
reviewLabelCons.gridy = 4;
reviewLabelCons.ipadx = 10;
reviewLabelCons.ipady = 10;
reviewLabelCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( reviewLabel, reviewLabelCons );
inputPanel.add( reviewLabel );
// Review Input Field
reviewField = new JTextField( 16 );
GridBagConstraints reviewFieldCons = new GridBagConstraints();
reviewFieldCons.gridx = 1;
reviewFieldCons.gridy = 4;
reviewFieldCons.ipadx = 10;
reviewFieldCons.ipady = 10;
reviewFieldCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( reviewField, reviewFieldCons );
reviewLabel.setLabelFor( reviewField );
inputPanel.add( reviewField );
// Add Book Button
addBookButton = new JButton( "Add" );
GridBagConstraints addBookButtonCons = new GridBagConstraints();
addBookButtonCons.gridx = 1;
addBookButtonCons.gridy = 5;
addBookButtonCons.ipadx = 10;
addBookButtonCons.ipady = 10;
addBookButtonCons.insets = new Insets( 5, 5, 5, 5);
inputPanelGridBag.setConstraints( addBookButton, addBookButtonCons );
inputPanel.add( addBookButton );
// Add Book Button Event Listener
addBookButton.addActionListener( this );
// Add `inputPanel` to `mainPanel`
this.add( inputPanel );
//// List Panel instantiation and configuration ////
/////////////////////////////////////////////////////
displayPanel = new JPanel();
GridBagLayout displayPanelGridBag = new GridBagLayout();
GridBagConstraints displayPanelCons = new GridBagConstraints();
displayPanelCons.gridx = 0;
displayPanelCons.gridy = 1;
displayPanelCons.gridheight = 2;
displayPanelCons.gridwidth = 1;
displayPanelCons.weightx = 0.25;
displayPanelCons.weighty = 0.25;
displayPanelCons.ipadx = 10;
displayPanelCons.ipady = 10;
displayPanelCons.anchor = GridBagConstraints.LAST_LINE_START;
displayPanelCons.fill = GridBagConstraints.BOTH;
displayPanelCons.insets = new Insets( 5, 5, 5, 5 );
displayPanelGridBag.setConstraints( displayPanel, displayPanelCons );
displayPanel.setBorder(
BorderFactory.createTitledBorder( loweredBorder,
"Book List") );
displayPanel.setLayout( displayPanelGridBag );
// Separate panel for ScrollPane
listPanel = new JScrollPane();
GridBagConstraints listPanelCons = new GridBagConstraints();
listPanelCons.gridx = 0;
listPanelCons.gridy = 0;
listPanelCons.ipadx = 10;
listPanelCons.ipady = 10;
listPanelCons.fill = GridBagConstraints.BOTH;
listPanelCons.insets = new Insets( 5, 5, 5, 5 );
displayPanelGridBag.setConstraints( listPanel, listPanelCons );
JTable listTable = new JTable();
listTable.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
String[] colHeaders = { "Title", "Author", "Genre", "Price", "Review" };
listTable.setModel(
new DefaultTableModel( colHeaders, 0 )
{
boolean[] colEditables = { false,
false,
false,
false,
false };
public boolean isCellEditable( int row, int col )
{
return colEditables[ col ];
}
});
listPanel.add( listTable );
displayPanel.add( listPanel );
displayButton = new JButton( "Display" );
GridBagConstraints displayButtonCons = new GridBagConstraints();
displayButtonCons.gridx = 0;
displayButtonCons.gridy = 1;
displayButtonCons.ipadx = 10;
displayButtonCons.ipady = 10;
displayButtonCons.insets = new Insets( 5, 5, 5, 5 );
displayPanelGridBag.setConstraints( displayButton, displayButtonCons );
displayButton.addActionListener( this );
displayPanel.add( displayButton );
this.add( displayPanel );
//// Search Panel instantiation and configuration ////
//////////////////////////////////////////////////////
searchPanel = new JPanel();
GridBagLayout searchPanelGridBag = new GridBagLayout();
GridBagConstraints searchPanelCons = new GridBagConstraints();
searchPanelCons.gridheight = 2;
searchPanelCons.gridwidth = 2;
searchPanelCons.weightx = 0.25;
searchPanelCons.weighty = 0.25;
searchPanelCons.gridx = 1;
searchPanelCons.gridy = 0;
searchPanelCons.ipadx = 10;
searchPanelCons.ipady = 10;
searchPanelCons.anchor = GridBagConstraints.FIRST_LINE_END;
searchPanelCons.fill = GridBagConstraints.BOTH;
searchPanelCons.insets = new Insets( 5, 5, 5, 5);
searchPanelGridBag.setConstraints( searchPanel, searchPanelCons );
searchPanel.setBorder(
BorderFactory.createTitledBorder( loweredBorder,
"Search for Book" ) );
searchPanel.setLayout( searchPanelGridBag );
// Search Input Label
searchLabel = new JLabel( "Search:", JLabel.TRAILING );
GridBagConstraints searchLabelCons = new GridBagConstraints();
searchLabelCons.gridx = 0;
searchLabelCons.gridy = 0;
searchLabelCons.ipadx = 10;
searchLabelCons.ipady = 10;
searchLabelCons.insets = new Insets( 5, 5, 5, 5);
searchPanelGridBag.setConstraints( searchLabel, searchLabelCons );
searchPanel.add( searchLabel );
// Search Input Field
searchField = new JTextField( 16 );
searchLabel.setLabelFor( searchField );
GridBagConstraints searchFieldCons = new GridBagConstraints();
searchFieldCons.gridx = 1;
searchFieldCons.gridy = 0;
searchFieldCons.ipadx = 10;
searchFieldCons.ipady = 10;
searchFieldCons.insets = new Insets( 5, 5, 5, 5);
searchPanelGridBag.setConstraints( searchField, searchFieldCons );
searchPanel.add( searchField );
// Search Button
searchButton = new JButton( "Search" );
searchButton.addActionListener( this );
GridBagConstraints searchButtonCons = new GridBagConstraints();
searchButtonCons.gridx = 1;
searchButtonCons.gridy = 1;
searchButtonCons.ipadx = 10;
searchButtonCons.ipady = 10;
searchFieldCons.insets = new Insets( 5, 5, 5, 5 );
searchPanelGridBag.setConstraints( searchButton, searchButtonCons );
searchPanel.add( searchButton );
this.add( searchPanel );
//// Output Panel instantiation and configuration ////
//////////////////////////////////////////////////////
outputPanel = new JPanel();
GridBagLayout outputPanelGridBag = new GridBagLayout();
GridBagConstraints outputPanelCons = new GridBagConstraints();
outputPanelCons.gridx = 1;
outputPanelCons.gridy = 1;
outputPanelCons.gridheight = 6;
outputPanelCons.gridwidth = 2;
outputPanelCons.weightx = 0.25;
outputPanelCons.weighty = 0.25;
outputPanelCons.ipadx = 10;
outputPanelCons.ipady = 10;
outputPanelCons.anchor = GridBagConstraints.LAST_LINE_END;
outputPanelCons.fill = GridBagConstraints.BOTH;
outputPanelCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( outputPanel, outputPanelCons );
outputPanel.setBorder(
BorderFactory.createTitledBorder( loweredBorder,
"Book Information" ) );
outputPanel.setLayout( outputPanelGridBag );
// Title Label
titleDisplayLabel = new JLabel( "Title:", JLabel.TRAILING );
GridBagConstraints titleDisplayCons = new GridBagConstraints();
titleDisplayCons.gridx = 0;
titleDisplayCons.gridy = 0;
titleDisplayCons.ipadx = 10;
titleDisplayCons.ipady = 10;
titleDisplayCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( titleDisplayLabel, titleDisplayCons );
outputPanel.add( titleDisplayLabel );
// Title Output
titleOutputLabel = new JLabel( "", JLabel.LEADING );
GridBagConstraints titleOutputCons = new GridBagConstraints();
titleOutputCons.gridx = 1;
titleOutputCons.gridy = 0;
titleOutputCons.ipadx = 10;
titleOutputCons.ipady = 10;
titleOutputCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( titleOutputLabel, titleOutputCons );
outputPanel.add( titleOutputLabel );
// Author Label
authorDisplayLabel = new JLabel( "Author:", JLabel.TRAILING );
GridBagConstraints authorDisplayCons = new GridBagConstraints();
authorDisplayCons.gridx = 0;
authorDisplayCons.gridy = 1;
authorDisplayCons.ipadx = 10;
authorDisplayCons.ipady = 10;
authorDisplayCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( authorDisplayLabel, authorDisplayCons );
outputPanel.add( authorDisplayLabel );
// Author Output
authorOutputLabel = new JLabel( "", JLabel.LEADING );
GridBagConstraints authorOutputCons = new GridBagConstraints();
authorOutputCons.gridx = 1;
authorOutputCons.gridy = 1;
authorOutputCons.ipadx = 10;
authorOutputCons.ipady = 10;
authorOutputCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( authorOutputLabel, authorOutputCons );
outputPanel.add( authorOutputLabel );
// Genre Label
genreDisplayLabel = new JLabel( "Genre:", JLabel.TRAILING );
GridBagConstraints genreDisplayCons = new GridBagConstraints();
genreDisplayCons.gridx = 0;
genreDisplayCons.gridy = 2;
genreDisplayCons.ipadx = 10;
genreDisplayCons.ipady = 10;
genreDisplayCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( genreDisplayLabel, genreDisplayCons );
outputPanel.add( genreDisplayLabel );
// Genre Output
genreOutputLabel = new JLabel( "", JLabel.LEADING );
GridBagConstraints genreOutputCons = new GridBagConstraints();
genreOutputCons.gridx = 1;
genreOutputCons.gridy = 2;
genreOutputCons.ipadx = 10;
genreOutputCons.ipady = 10;
genreOutputCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( genreOutputLabel, genreOutputCons );
outputPanel.add( genreOutputLabel );
// Price Label
priceDisplayLabel = new JLabel( "Price:", JLabel.TRAILING );
GridBagConstraints priceDisplayCons = new GridBagConstraints();
priceDisplayCons.gridx = 0;
priceDisplayCons.gridy = 3;
priceDisplayCons.ipadx = 10;
priceDisplayCons.ipady = 10;
priceDisplayCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( priceDisplayLabel, priceDisplayCons );
outputPanel.add( priceDisplayLabel );
// Price Output
priceOutputLabel = new JLabel( "", JLabel.LEADING );
GridBagConstraints priceOutputCons = new GridBagConstraints();
priceOutputCons.gridx = 1;
priceOutputCons.gridy = 3;
priceOutputCons.ipadx = 10;
priceOutputCons.ipady = 10;
priceOutputCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( priceOutputLabel, priceOutputCons );
outputPanel.add( priceOutputLabel );
// Review Label
reviewDisplayLabel = new JLabel( "Review:", JLabel.TRAILING );
GridBagConstraints reviewDisplayCons = new GridBagConstraints();
reviewDisplayCons.gridx = 0;
reviewDisplayCons.gridy = 4;
reviewDisplayCons.ipadx = 10;
reviewDisplayCons.ipady = 10;
reviewDisplayCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( reviewDisplayLabel, reviewDisplayCons );
outputPanel.add( reviewDisplayLabel );
// Review Output
reviewOutputLabel = new JLabel( "", JLabel.LEADING );
GridBagConstraints reviewOutputCons = new GridBagConstraints();
reviewOutputCons.gridx = 1;
reviewOutputCons.gridy = 4;
reviewOutputCons.ipadx = 10;
reviewOutputCons.ipady = 10;
reviewOutputCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( reviewOutputLabel, reviewOutputCons );
outputPanel.add( reviewOutputLabel );
// Edit Button
editBookButton = new JButton( "Edit" );
GridBagConstraints editButtonCons = new GridBagConstraints();
editButtonCons.gridx = 0;
editButtonCons.gridy = 5;
editButtonCons.ipadx = 10;
editButtonCons.ipady = 10;
editButtonCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( editBookButton, editButtonCons );
outputPanel.add( editBookButton );
editBookButton.addActionListener( this );
// Delete Button
deleteBookButton = new JButton( "Delete" );
GridBagConstraints deleteButtonCons = new GridBagConstraints();
deleteButtonCons.gridx = 1;
deleteButtonCons.gridy = 5;
deleteButtonCons.ipadx = 10;
deleteButtonCons.ipady = 10;
deleteButtonCons.insets = new Insets( 5, 5, 5, 5 );
outputPanelGridBag.setConstraints( deleteBookButton, deleteButtonCons );
outputPanel.add( deleteBookButton );
deleteBookButton.addActionListener( this );
this.add( outputPanel );
}
public void actionPerformed(ActionEvent e)
{
}
}
下面是编译和运行应用程序时窗口的外观:
我知道我没有连接任何东西来在显示面板中的JTable中显示数据,但是标题不也应该出现吗
如果需要任何澄清,请告诉我,我会考虑其他有用的内容,并根据需要进行一些更新。这里您将用表替换JScrollPane的ViewportView
listPanel.add( listTable );
取代
listPanel.setViewportView(listTable);
阅读:。你真的希望有人能看穿这一团糟?您应该将面板划分为自包含的类,这样可以将每个面板中的混乱减少到与该面板相关的内容;然后可以分别测试每个面板布局。一旦你有了它,哪里出了问题就显而易见了。