【发布时间】:2016-08-29 02:26:41
【问题描述】:
我在为我的 java swing 项目打印按钮时遇到问题。对于类,我想复制一个 GUI。到目前为止,我已经能够做得很好。但是我遇到了按钮在同一位置相互重叠而不是水平相邻的问题。下面是如何将按钮打印到面板上的图像。
所以我有两个面板,一个包含标签和文本框 (Toppane),另一个包含按钮,总共 5 个 (bottomPane)。我试图让五个按钮打印在 GUI 的底部并且很难。我觉得我错过了一些简单的东西。
--------------------------------------------------------------
| label [textfield] |
| label [textField] |
| label [textfield] |
|-------------------------------------------------------------
| [button] [button] [button] [button] [button] |
--------------------------------------------------------------
但我明白了:
--------------------------------------------------------------
| label [textfield] |
| label [textField] |
| label [textfield] |
|-------------------------------------------------------------
| [ Button's 12345 ] |
--------------------------------------------------------------
代码:
package book;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
/**
*
* @author KJ4CC
*/
public class Book extends JFrame {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Book book = new Book();
book.bookingUI();
}
public static void bookingUI(){
//sets windows, and pane in the UI
JFrame frame = new JFrame("Ye old Book store");
JPanel toppane = new JPanel(new GridBagLayout());
JPanel bottomPane = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
frame.setSize(1000, 600);
frame.setVisible(true);
//adds labels to the window
JLabel num = new JLabel("Enter Number of Items in this Order");
JLabel bookID = new JLabel("111111");
JLabel quantityItem = new JLabel("222222");
JLabel itemInfo = new JLabel("333zfgfsfg333");
JLabel subtotal = new JLabel("4444444");
//adding the labels to the panel
c.anchor = GridBagConstraints.EAST;
c.weighty = 1;
c.gridx = 2;
c.gridy = 1;
toppane.add(num, c);
c.gridx = 2;
c.gridy = 2;
toppane.add(bookID, c);
c.gridx = 2;
c.gridy = 3;
toppane.add(quantityItem, c);
c.gridx = 2;
c.gridy = 4;
toppane.add(itemInfo,c);
c.gridx = 2;
c.gridy = 5;
toppane.add(subtotal,c);
bottomPane.setBackground(Color.GREEN);
frame.add(toppane,BorderLayout.EAST);
//adds textfields to the frame
JTextField amount = new JTextField();
JTextField id = new JTextField();
JTextField quantity = new JTextField();
JTextField info = new JTextField();
JTextField total = new JTextField();
//add textfield to panel
c.ipadx = 230;
c.gridx = 3;
c.gridy= 1;
toppane.add(amount, c);
c.gridx = 3;
c.gridy = 2;
toppane.add(id, c);
c.gridx = 3;
c.gridy = 3;
toppane.add(info, c);
c.gridx = 3;
c.gridy = 4;
toppane.add(total, c);
c.gridx = 3;
c.gridy = 5;
toppane.add(quantity,c);
//setting up buttons to be placed onto the bottompanel
JButton processItem = new JButton("Process Item");
JButton confirmItem = new JButton("Confirm Item");
JButton viewOrder = new JButton("View Order");
JButton finishOrder = new JButton("Finish Order ");
JButton newOrder = new JButton("New Order");
JButton exit = new JButton("Exit");
//adding the buttons to the pane.
GridBagConstraints b = new GridBagConstraints();
b.anchor = GridBagConstraints.NORTHWEST;
bottomPane.add(processItem, c);
bottomPane.add(confirmItem,c);
bottomPane.add(viewOrder, c);
bottomPane.add(finishOrder,c);
bottomPane.add(newOrder,c);
bottomPane.add(exit, c);
bottomPane.setBackground(Color.BLUE);
frame.add(bottomPane,BorderLayout.SOUTH);
}
}
我个人觉得这与我使用的布局管理器有关。我不知道我是否将它正确地用于正确的应用程序。我一直在使用GridBagLayout,这就是我迄今为止用于学校的全部内容。
【问题讨论】:
-
1) “是的,我知道颜色选择很丑……但这是教授想要的,哈哈” 这并不意味着您需要在此处显示的代码,您可以在布局问题修复后将其放入! 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度。 3) “我一直在使用
GridBagLayout,这就是我迄今为止在学校所用的所有东西。” 当你只有一把锤子时,一切看起来都像钉子。不同的布局管理器适用于不同的事情,而且通常最简单.. -
.. 通过组合布局管理器来创建 GUI。
-
我添加了一些艺术来展示我在说什么哈哈,我还认为 gridbaglayout 会自动执行此操作,但我想我会研究其他一些经理。
-
您在代码的底部创建了一个 GridBagConstraints 对象
b,但您将其保留为未使用。在添加按钮时,也许您可以(并且应该)使用它而不是其他 GridBagConstraints 对象c,特别是因为您已经修改了c的许多字段(这可能是您的问题的原因)。 -
@JohnathanYaesu -1,不够box drawing characters,哈哈。
标签: java swing jbutton layout-manager