GridBagLayout
GridBagLayout
a container is divided into a
specified number of rows and columns, but components may occupy
more than one cell of the grid (their "display areas").
Heights of rows and widths of columns are not necessarily the same in a
GridBagLayout
. All this gives you a lot control on
the size and position of components, on filling of unused space, on internal
and external padding, and so on.
With each component in a GridBagLayout
is associated a set of
constraints contained within a GridBagConstraints
instance that specifies how the component is to be
laid out. GridBagLayout
is rather complicated to use. Instead
of listing all possibilities of GridBagLayout
we shall only give one example to serve as a prototype.
import java.applet.Applet; import java.awt.*; public class FontSelector extends Applet { private Font currentFont, defaultFont; public void init() { // get default font defaultFont = getFont(); currentFont = defaultFont; // specify the gridbag layout GridBagLayout grid = new GridBagLayout(); int rowHeights[] = {0,30,30,30,30}; int columnWidths[] = {0,30,30,30}; double rowWeights[] = {0.0, 0.0, 0.0, 0.0, 0.0}; double columnWeights[] = {0.0, 0.0, 0.0, 0.0}; grid.rowHeights = rowHeights; grid.columnWidths = columnWidths; grid.rowWeights = rowWeights; grid.columnWeights = columnWeights; // create the components Label nameLabel = new Label("Java Font Name:"); nameLabel.setFont(new Font("Helvetica", Font.BOLD, 14)); add(nameLabel); // Label sizeLabel = new Label("Font Size:"); sizeLabel.setFont(new Font("Helvetica", Font.BOLD, 14)); add(sizeLabel); // Label attributesLabel = new Label("Attributes:"); attributesLabel.setFont(new Font("Helvetica", Font.BOLD, 14)); add(attributesLabel); // Choice nameChoice = new Choice(); nameChoice.addItem("default"); nameChoice.addItem("Courier"); nameChoice.addItem("Dialog"); nameChoice.addItem("DialogInput"); nameChoice.addItem("Helvetica"); nameChoice.addItem("Symbol"); nameChoice.addItem("TimesRoman"); nameChoice.addItem("ZapfDingbats"); nameChoice.setFont(new Font("Dialog", Font.PLAIN, 12)); add(nameChoice); // Choice sizeChoice = new Choice(); sizeChoice.addItem("* "); sizeChoice.addItem("10"); sizeChoice.addItem("12"); sizeChoice.addItem("14"); sizeChoice.addItem("20"); sizeChoice.addItem("24"); sizeChoice.addItem("36"); sizeChoice.setFont(new Font("Dialog", Font.PLAIN, 12)); add(sizeChoice); // Panel stylePanel = new Panel(); stylePanel.setLayout(new GridLayout(4, 1)); CheckboxGroup style = new CheckboxGroup(); // specify font attributes Checkbox plain = new Checkbox("Plain", style, true); plain.setFont(new Font("Dialog", Font.PLAIN, 12)); Checkbox bold = new Checkbox("Bold", style, false); bold.setFont(new Font("Dialog", Font.BOLD, 12)); Checkbox italic = new Checkbox("Italic", style, false); italic.setFont(new Font("Dialog", Font.ITALIC, 12)); Checkbox bolditalic = new Checkbox("Bold Italic", style, false); bolditalic.setFont(new Font("Dialog", Font.BOLD + Font.ITALIC, 12)); // add style panel stylePanel.add(plain); stylePanel.add(bold); stylePanel.add(italic); stylePanel.add(bolditalic); add(stylePanel); // Label sampleLabel = new Label("Sample:"); sampleLabel.setFont(new Font("Helvetica", Font.BOLD, 14)); add(sampleLabel); // TextArea sampleArea = new TextArea( "ABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz\n0123456789", 3, 27); sampleArea.setFont(defaultFont); add(sampleArea); // // geometry management // GridBagConstraints constraints = new GridBagConstraints(); // row 1, column 1: font name label reset(constraints); constraints.gridx = 1; constraints.gridy = 1; constraints.anchor = GridBagConstraints.SOUTHWEST; constraints.fill = GridBagConstraints.NONE; grid.setConstraints(nameLabel, constraints); // row 1, column 2: font size label reset(constraints); constraints.gridx = 2; constraints.gridy = 1; constraints.anchor = GridBagConstraints.SOUTHWEST; constraints.fill = GridBagConstraints.NONE; grid.setConstraints(sizeLabel, constraints); // row 1, column 3: font attributes reset(constraints); constraints.gridx = 3; constraints.gridy = 1; constraints.anchor = GridBagConstraints.SOUTHWEST; constraints.fill = GridBagConstraints.NONE; grid.setConstraints(attributesLabel, constraints); // row 2, column 1: logical font name reset(constraints); constraints.gridx = 1; constraints.gridy = 2; constraints.anchor = GridBagConstraints.NORTHWEST; constraints.fill = GridBagConstraints.NONE; grid.setConstraints(nameChoice, constraints); // row 2, column 2: font size reset(constraints); constraints.gridx = 2; constraints.gridy = 2; constraints.anchor = GridBagConstraints.NORTHWEST; constraints.fill = GridBagConstraints.NONE; grid.setConstraints(sizeChoice, constraints); // row 2, column 3: Checkbox group of font attributes reset(constraints); constraints.gridx = 3; constraints.gridy = 2; constraints.anchor = GridBagConstraints.NORTHWEST; constraints.fill = GridBagConstraints.BOTH; grid.setConstraints(stylePanel, constraints); // row 3, all columns: sample label reset(constraints); constraints.gridx = 1; constraints.gridy = 3; constraints.gridwidth = 3; constraints.anchor = GridBagConstraints.SOUTHWEST; constraints.fill = GridBagConstraints.NONE; grid.setConstraints(sampleLabel, constraints); // row 4, all columns: sample area reset(constraints); constraints.gridx = 1; constraints.gridy = 4; constraints.gridwidth = 3; constraints.anchor = GridBagConstraints.SOUTHWEST; constraints.fill = GridBagConstraints.BOTH; grid.setConstraints(sampleArea, constraints); // set gridbag layout setLayout(grid); } private void reset(GridBagConstraints con) { // default constraints con.gridx = GridBagConstraints.RELATIVE; con.gridy = GridBagConstraints.RELATIVE; con.gridwidth = 1; con.gridheight = 1; con.weightx = 0; con.weighty = 0; con.anchor = GridBagConstraints.CENTER; con.fill = GridBagConstraints.NONE; con.insets = new Insets(0, 0, 0, 0); con.ipadx = 0; con.ipady = 0; } }