如何使用GridBagLayout将组件放在右下角?
我需要在JPanel
显示单个组件,并且我希望始终将该组件保留在右下角。 我尝试用GridBagLayout做到这一点:
val infoArea = new TextArea { text = "Hello!" border = Swing.EmptyBorder(30) background = Color.RED editable = false } val p = new JPanel p.setLayout(new GridBagLayout) val c = new GridBagConstraints c.gridx = 0 c.gridy = 0 c.anchor = GridBagConstraints.LAST_LINE_END p.add(infoArea.peer,c) val f = new JFrame f.setContentPane(p) f.setVisible(true)
但由于某种原因,文本区域处于中心位置:
我在这做错了什么?
final JFrame frame = new JFrame(); frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1.0; gbc.weighty = 1.0; frame.add(Box.createGlue(), gbc); final JTextArea textArea = new JTextArea("SE"); textArea.setPreferredSize(new Dimension(50, 50)); textArea.setOpaque(true); textArea.setBackground(Color.RED); gbc = new GridBagConstraints(); gbc.gridx = 1; gbc.gridy = 1; gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0.0; gbc.weighty = 0.0; frame.add(textArea, gbc); frame.setSize(640, 480); frame.setVisible(true);
…如果你真的想要使用GridBagLayout
例如:
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.*; public class LayoutDemo { private static void createAndShowGui() { JLabel label = new JLabel("Hello"); label.setOpaque(true); label.setBackground(Color.red); JPanel bottomPanel = new JPanel(new BorderLayout()); bottomPanel.add(label, BorderLayout.LINE_END); JPanel mainPanel = new JPanel(new BorderLayout()); mainPanel.add(bottomPanel, BorderLayout.PAGE_END); mainPanel.setPreferredSize(new Dimension(400, 400)); JFrame frame = new JFrame("LayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(mainPanel); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } }