java - 在 JPanel 中使用 GroupLayout 来对齐 JTextFields 和 JLabels?

标签 java swing jlabel jtextfield grouplayout

所以,这是我的问题:我使用 oracle 文档作为我的项目的示例,但是当我运行该程序时,它显示为一个中间带有“周薪:”的框。我做错了什么?

JFrame window = new JFrame();
window.setTitle("Weekly Pay");
window.setSize(300, 150);
window.setResizable(false);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Color lGray = new Color(209, 209, 209);
GroupLayout layout = new GroupLayout(window);

JPanel panel = new JPanel();
panel.setBackground(lGray);
panel.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);

JLabel id = new JLabel("ID Number");
JLabel hw = new JLabel("Hourly Wage");
JLabel rh = new JLabel("Regular Hours");
JLabel oh = new JLabel("Overtime Hours");
JButton calc = new JButton("Calculate");
JTextField idEntry = new JTextField(); //where the user imputs their ID
JTextField hwEntry = new JTextField(); //where the user imputs their hourly wage
JTextField rhEntry = new JTextField(); //where the user imputs their regular hours
JTextField ohEntry = new JTextField(); //where the user imputs their overtime hours
JLabel wp = new JLabel("Weekly Pay:");    

GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();    
hGroup.addGroup(layout.createParallelGroup().
  addComponent(id).addComponent(hw).addComponent(rh).addComponent(oh).addComponent(calc));
hGroup.addGroup(layout.createParallelGroup().
  addComponent(idEntry).addComponent(hwEntry).addComponent(rhEntry).addComponent(ohEntry).addComponent(wp));
layout.setHorizontalGroup(hGroup);

GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();    
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(id).addComponent(idEntry));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(hw).addComponent(hwEntry));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(rh).addComponent(rhEntry));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(oh).addComponent(ohEntry));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(calc).addComponent(wp));
layout.setVerticalGroup(vGroup);

window.setVisible(true);

最佳答案

有两个主要问题:您在框架上设置组布局管理器,而不是面板,并且您实际上并没有将面板放置到框架/窗口上(因为在java UI编程中有一个称为窗口的东西,我质疑将框架保持为“窗口”的变量的命名。

不要使用“GroupLayout layout = new GroupLayout(window);”,而是使用“GroupLayout layout = new GroupLayout(panel);//当然是在面板构建之后”。

然后使用“window.add(panel);”将面板放入框架/窗口中;我会把这个和“window.pack();”就在“window.setVisible(true);”之前

rc

关于java - 在 JPanel 中使用 GroupLayout 来对齐 JTextFields 和 JLabels?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12849851/

相关文章:

java - 该组件未出现在西边框布局中

java - 更新 JFrame 内容

java - 添加一个将 JLabel 扩展到带有 gridlayout 的面板中的类

java - Firebase 在类上找不到要序列化的属性

java - Azure Blob - 并行上传非常大的文件

java - JFrame 未出现

java - 如何将 800x600 图像放入 jLabel 中,而无需滚动即可查看整个图像

java - 自定义 JLabel 清理

java - 何时使用 Cron Job 与 ScheduledExecutorService

java - 添加存储在数组列表中的 double 值