【问题标题】:How to take these labels in exactly required position如何将这些标签准确地放在需要的位置
【发布时间】:2013-06-01 14:19:02
【问题描述】:

我正在尝试创建一个带有一些标签和 txtAreas 的小型 GUI。我通过使用绝对定位来做到这一点,但我想继续使用 gridbag 布局。我从过去 3 天开始尝试,但无法将这些标签作为所需位置。要么卡在中间,要么卡在边界附近。请帮助他们担任这些职位。

public void initUIPanel() {

    jf = new JFrame();
    jf.setTitle("Mortgage Calculator");
    jf.setLocation(100,200);
    jf.setSize(400,500);
    jf.setVisible (true);
    //jf.setResizable(false);



JPanel panel = new JPanel();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;

loanAmount = new JTextField(15);
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(loanAmount, gbc);
panel.add(loanAmount);


loanTerm = new JTextField(15);
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(loanTerm, gbc);
panel.add(loanTerm);


amount = new JLabel("Loan Amount");
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(amount, gbc);
panel.add(amount);


term= new JLabel("Loan Term");
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(term, gbc);
panel.add(term);


currency = new JLabel ("AUD");
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(currency, gbc);
panel.add(currency);


numOfYear = new JLabel ("Year");
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(numOfYear, gbc);
panel.add(numOfYear);


JPanel middlePanel = new JPanel ();

middlePanel.setBorder ( new TitledBorder ( new EtchedBorder (), "Display Area" ) ); 
txtResult = new JTextArea();
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(txtResult, gbc);
panel.add(txtResult);


jf.add(panel,"Center");
//panel.setBounds(200,200,200,20);
jf.setVisible(true);

}

它在 2 行中给出所有内容。都搞砸了。 我想要的是

First Line: Loan Amount: ............(txt Area).... "AUD"
Second LIne: Loan Term: .............(Txt Area......Years

然后是文本框

谢谢

【问题讨论】:

  • 您的代码根本没有使用 gridbaglayout。向我们展示您尝试过的代码,并告诉我们您希望面板是什么样子,以及它的实际外观。
  • 我已经编辑了我的帖子。请看一看。谢谢
  • 所有组件的 gridx 和 gridy 都设置为 0,因此它们都共享网格中的同一个单元格。
  • 对此感到抱歉。但即使改变其中任何一个也不会改变 GUI 中的位置。这就是问题

标签: java jframe layout-manager gridbaglayout


【解决方案1】:

您还没有设置面板的布局:

panel.setLayout(gbl);

而且,正如cmets中已经说过的,所有的组件都有相同的gridx和gridy,这显然是不对的。

这是一个完整的例子,如果我理解正确的话,它会做你想要的:

import javax.swing.*;
import java.awt.*;

public class GblTest extends JFrame {

    public GblTest() {
        add(createPanel(), BorderLayout.NORTH);
    }

    private JPanel createPanel() {
        JPanel p = new JPanel();
        p.setLayout(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 0;
        c.anchor = GridBagConstraints.BASELINE_LEADING;
        p.add(new JLabel("Loan amount"), c);

        c.gridx++;
        p.add(new JTextField(15), c);

        c.gridx++;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
        p.add(new JLabel("AUD"), c);

        c.gridx = 0;
        c.gridy++;
        c.fill = GridBagConstraints.NONE;
        c.weightx = 0.0;
        p.add(new JLabel("Loan term"), c);

        c.gridx++;
        p.add(new JTextField(15), c);

        c.gridx++;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
        p.add(new JLabel("Years"), c);

        return p;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                GblTest test = new GblTest();
                test.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                test.pack();
                test.setVisible(true);
            }
        });
    }
}

【讨论】:

  • 谢谢。我想要的是“贷款金额”标签放置在北/西角附近。但它只是在中心周围漫游。我尝试将面板放在“北方”,但随后它挂在北方的中心。
  • 查看我编辑的答案。您必须让某个单元格水平放大,以便面板向左对齐。
  • 谢谢尼泽特。我从未见过如此清晰的例子。连我的导师都无法像你刚才那样解释。感谢您的帮助。
猜你喜欢
  • 2018-10-12
  • 1970-01-01
  • 2021-09-23
  • 2014-05-18
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
相关资源
最近更新 更多