java - 在 BorderLayout 中对齐 JLabel 和 JTextField

标签 java swing

我只是尝试使用 Java BorderLayoutGridLayout 与一些 GUI 组件。

我正在尝试使 JLabel 右对齐并使 JTextField 左对齐,这样它的外观会好得多。

setAlignmentXsetHorizo​​ntalAlignment 的帮助下,我在 stackoverflow 本身找到了一些答案。两者都不起作用。

基本上,我在每个 BorderLayout 中有 3 个组件。

  1. J标签
  2. JTextField
  3. J按钮

然后,这些组件被添加到每一行的 GridLayout 中。

enter image description here

代码

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 *
 * @author dinesh
 */
public class MySettings {

    public static void main(String[] args) {
        JFrame jf = new JFrame("hi");

        //demo Info Panel start
        // <editor-fold defaultstate="collapsed" desc="demo info panel">
        JLabel lbldemoExecutablePath = new JLabel("demo Executable Path :");
//        lbldemoExecutablePath.setAlignmentX(JLabel.LEADING);
//        lbldemoExecutablePath.setAlignmentY(JLabel.LEADING);
//        lbldemoExecutablePath.setHorizontalAlignment(SwingConstants.CENTER);

        JTextField txtdemoInstallationPath = new JTextField(10);
        txtdemoInstallationPath.setEditable(false);
        txtdemoInstallationPath.setBackground(Color.WHITE);
        txtdemoInstallationPath.setToolTipText("getdemoPath()");
        txtdemoInstallationPath.setAlignmentX(JLabel.LEADING);
        txtdemoInstallationPath.setAlignmentY(JLabel.LEADING);

        JButton btndemoBrowse = new JButton("Browse");

        btndemoBrowse.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                System.out.println("demo browse button clicked");
            }
        });

        JPanel pnldemoInfo = new JPanel(new BorderLayout(10, 10));
        pnldemoInfo.add(lbldemoExecutablePath, BorderLayout.LINE_START);
        pnldemoInfo.add(txtdemoInstallationPath, BorderLayout.CENTER);
        pnldemoInfo.add(btndemoBrowse, BorderLayout.LINE_END);
        // </editor-fold>
        //demo info panel end

        //sample Info Panel start
        // <editor-fold defaultstate="collapsed" desc="sample info panel">
        JLabel lblsampleExecutablePath = new JLabel("sample Executable Path :");
//        lblsampleExecutablePath.setAlignmentX(JLabel.LEADING);
//        lblsampleExecutablePath.setAlignmentY(JLabel.LEADING);
        JTextField txtsampleInstallationPath = new JTextField(10);
        txtsampleInstallationPath.setEditable(false);
        txtsampleInstallationPath.setBackground(Color.WHITE);
        txtsampleInstallationPath.setToolTipText("getsamplePath()");


        JButton btnsampleBrowse = new JButton("Browse");

        btnsampleBrowse.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                System.out.println("demo browse button clicked");
            }
        });

        JPanel pnlsampleInfo = new JPanel(new BorderLayout(10, 10));
        pnlsampleInfo.add(lblsampleExecutablePath, BorderLayout.LINE_START);
        pnlsampleInfo.add(txtsampleInstallationPath, BorderLayout.CENTER);
        pnlsampleInfo.add(btnsampleBrowse, BorderLayout.LINE_END);
        // </editor-fold>
        //sample info panel end

        //app Info Panel start
        // <editor-fold defaultstate="collapsed" desc="app info panel">
        JLabel lblappExecutablePath = new JLabel("app Executable Path :");
//        lblappExecutablePath.setAlignmentX(JLabel.LEADING);
        JTextField txtappExecutablePath = new JTextField(10);
        txtappExecutablePath.setEditable(false);
        txtappExecutablePath.setBackground(Color.WHITE);
        txtappExecutablePath.setToolTipText("gettxtappExecutablePath()");

        JButton btnappBrowse = new JButton("Browse");

        btnappBrowse.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                System.out.println("appBrowse browse button clicked");
            }
        });

        JPanel pnlappInfo = new JPanel(new BorderLayout(10, 10));
        pnlappInfo.add(lblappExecutablePath, BorderLayout.LINE_START);
        pnlappInfo.add(txtappExecutablePath, BorderLayout.CENTER);
        pnlappInfo.add(btnappBrowse, BorderLayout.LINE_END);
        // </editor-fold>
        //app info panel end

        //logfile Info Panel start
        // <editor-fold defaultstate="collapsed" desc="logfile info panel">
        JLabel lblLogFilePath = new JLabel("Log File Path :");
//        lblLogFilePath.setAlignmentX(JLabel.LEADING);
        JTextField txtLogFilePath = new JTextField(10);
        txtLogFilePath.setEditable(false);
        txtLogFilePath.setBackground(Color.WHITE);
        txtLogFilePath.setToolTipText("gettxtLogFilePath()");

        JButton btnLogFileBrowse = new JButton("Browse");

        btnLogFileBrowse.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                System.out.println("appBrowse browse button clicked");
            }
        });

        JPanel pnlLogFileInfo = new JPanel(new BorderLayout(10, 10));
        pnlLogFileInfo.add(lblLogFilePath, BorderLayout.LINE_START);
        pnlLogFileInfo.add(txtLogFilePath, BorderLayout.CENTER);
        pnlLogFileInfo.add(btnLogFileBrowse, BorderLayout.LINE_END);
        // </editor-fold>
        //logfile info panel end

        JPanel pnlGereal = new JPanel(new GridLayout(0, 1));
        pnlGereal.add(pnldemoInfo);
        pnlGereal.add(pnlsampleInfo);
        pnlGereal.add(pnlappInfo);
        pnlGereal.add(pnlLogFileInfo);

        jf.add(pnlGereal);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //jf.setSize(500, 500);

        jf.pack();
        jf.setVisible(true);
    }

}

我哪里出错了?我在哪里准确设置对齐方式?

最佳答案

对齐在这里不起作用,因为 BorderLayout 使用 JLabels 的大小并动态调整宽度。

您可以尝试使用以下代码查看对齐是否有效:

JLabel lbldemoExecutablePath = new JLabel( "demo Executable Path :" );
lbldemoExecutablePath.setPreferredSize( new Dimension(200,100) );
lbldemoExecutablePath.setHorizontalAlignment( SwingConstants.RIGHT );

你可以在这里看到你的 JLabel( "demo Executable Path :") 在右边。 但是,您不应该在您的代码中使用 setPreferredSize() 方法,我发布它只是为了向您展示对齐是有效的。

您可以使用 JGoodies 中的 FormLayout 而不是 BorderLayout http://www.jgoodies.com/freeware/libraries/forms/ .

关于java - 在 BorderLayout 中对齐 JLabel 和 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29695609/

相关文章:

java - Dynamic Code Evolution VM 崩溃

java - 对数组中的每个标签使用 addMouseListener() 吗?

Java在线程中的循环中向JButton添加点击监听器

java - 如何从部署到 Websphere 6.1 的 EJB 访问身份验证别名

java - 有没有办法释放饱和的连接池?

java - 托管 Bean 注销不起作用

java - try/catch jdbc java 无法将 jpanel 放入 jframe 中

java - org.hibernate.Hibernate 枚举常量

java - java中一定次数的循环后执行操作

java - 是否可以更改 JTabbedPane 的布局?