Changing size of Java button GridBayLayout
你好,我有一个大问题。 我想使" ="按钮2 *高度和" 0"按钮2 *宽度(其他按钮应该只是正常大小),这就是我尝试过的许多combinantions的结果,但是我得到的是奇怪的大小。
我明白了
我得到了什么http://desmond.imageshack.us/Himg684/scaled.php?server=684&filename=33109545.jpg&res=landing
我想得到与我在网上发现的相似的东西(仅按钮布局)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | public void someMethod() Container cp = getContentPane(); cp.setLayout(new BorderLayout()); JPanel wyswietlacz = new JPanel(); JTextField txt = new JTextField("123"); txt.setPreferredSize(new Dimension(getWidth() - 10, 35)); txt.setAlignmentX(JTextField.RIGHT_ALIGNMENT); wyswietlacz.add(txt); JPanel opcje = new JPanel(); String[] etykiety = {"C",".","/","*","7","8","9","-","4","5", "6","+","1","2","3","=","0","+/-" }; JButton[] przyciski = new JButton[18]; for (int i = 0; i < przyciski.length; i++) przyciski[i] = new JButton(etykiety[i]); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; opcje.setLayout(gridbag); for (int i = 0; i < przyciski.length; i++) { if (((i + 1) % 4) == 0) { c.gridwidth = GridBagConstraints.REMAINDER; } else { c.gridwidth = GridBagConstraints.RELATIVE; } if (i == 15) { c.gridheight = 2; c.fill = GridBagConstraints.HORIZONTAL; } if (i == 16) c.gridy = GridBagConstraints.SOUTH; if (i == 16) { c.gridwidth = 2; c.fill = GridBagConstraints.HORIZONTAL; } makebutton(przyciski[i], gridbag, c, opcje); } add(wyswietlacz, BorderLayout.NORTH); add(opcje, BorderLayout.CENTER); } protected void makebutton(JButton button, GridBagLayout gridbag, GridBagConstraints c, JPanel jp) { gridbag.setConstraints(button, c); jp.add(button); } public static void main(String[] args) { new Kalkulator(); } |
尝试使用此代码示例,并提出可能出现的任何问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | import java.awt.*; import javax.swing.*; public class GridBagTest { private String[] buttonText = {"C",".","/","*","7","8","9","-","4","5", "6","+","1","2","3","=","0","+/-" }; private JButton[] button = new JButton[18]; private int counter = 0; private void createAndDisplayGUI() { JFrame frame = new JFrame("GridBagLayout Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); JPanel northPanel = new JPanel(); northPanel.setLayout(new BorderLayout(2, 2)); JTextField tfield = new JTextField(); northPanel.add(tfield, BorderLayout.CENTER); JPanel centerPanel = new JPanel(); centerPanel.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.PAGE_START; gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1.0; gbc.weighty = 1.0; gbc.insets = new Insets(2, 2, 2, 2); for (int i = 0; i < button.length; i++) { System.out.println("Button Text :" + buttonText[i]); button[i] = new JButton(buttonText[i]); } for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { gbc.gridx = j; gbc.gridy = i; centerPanel.add(button[counter++], gbc); } } gbc.gridx = 0; gbc.gridy = 3; centerPanel.add(button[counter++], gbc); gbc.gridx = 1; gbc.gridy = 3; centerPanel.add(button[counter++], gbc); gbc.gridx = 2; gbc.gridy = 3; centerPanel.add(button[counter++], gbc); gbc.gridx = 3; gbc.gridy = 3; gbc.gridwidth = 1; gbc.gridheight = 2; centerPanel.add(button[counter++], gbc); int count = counter; System.out.println(button[--count].getText()); gbc.gridx = 0; gbc.gridy = 4; gbc.gridheight = 1; gbc.gridwidth = 2; centerPanel.add(button[counter++], gbc); gbc.gridwidth = 1; gbc.gridx = 2; gbc.gridy = 4; centerPanel.add(button[counter++], gbc); contentPane.add(northPanel, BorderLayout.PAGE_START); contentPane.add(centerPanel, BorderLayout.CENTER); frame.setContentPane(contentPane); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String... args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new GridBagTest().createAndDisplayGUI(); } }); } } |
这是输出:
我看不到任何问题,请阅读
-
如何使用GridBagLayout
-
GridBagConstraints和锚
然后
从代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import java.awt.*; import javax.swing.*; public class GridBagButtons { private static final Insets insets = new Insets(0, 0, 0, 0); public static void main(final String args[]) { final JFrame frame = new JFrame("GridBagLayout"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new GridBagLayout()); JButton button; // Row One - Three Buttons button = new JButton("One"); addComponent(frame, button, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("Two"); addComponent(frame, button, 1, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("Three"); addComponent(frame, button, 2, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); // Row Two - Two Buttons button = new JButton("Four"); addComponent(frame, button, 0, 1, 2, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("Five"); addComponent(frame, button, 2, 1, 1, 2, GridBagConstraints.CENTER, GridBagConstraints.BOTH); // Row Three - Two Buttons button = new JButton("Six"); addComponent(frame, button, 0, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("Seven"); addComponent(frame, button, 1, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); frame.setSize(500, 200); frame.setVisible(true); } private static void addComponent(Container container, Component component, int gridx, int gridy, int gridwidth, int gridheight, int anchor, int fill) { GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0, anchor, fill, insets, 0, 0); container.add(component, gbc); } private GridBagButtons() { } } |
- 我会使用NestedLayout而不是去烦GrigBagLayout,SpringLayout或MigLayout
问题是您没有在GridBagConstraints上设置weightx和weighty。 将它们设置为1.0将为每个组件平均分配(水平/垂直)额外的空间。