我只是尝试使用 Java BorderLayout
和 GridLayout
与一些 GUI 组件。
我正在尝试使 JLabel
右对齐并使 JTextField
左对齐,这样它的外观会好得多。
在 setAlignmentX
和 setHorizontalAlignment
的帮助下,我在 stackoverflow 本身找到了一些答案。两者都不起作用。
基本上,我在每个 BorderLayout
中有 3 个组件。
- J标签
- JTextField
- J按钮
然后,这些组件被添加到每一行的 GridLayout
中。
代码
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/