java – 使用GridBagLayout Manager将页面右上角的组件对齐
发布时间:2020-12-15 04:10:32 所属栏目:Java 来源:网络整理
导读:我正在尝试创建一个像facebook一样的登录页面,但我写的代码并没有在左上角显示它而是显示在页面的中心,我使用GridBagLayout和anchore在FIRST_LINE_END设置文本. final JFrame f2=new JFrame("Admin Main"); f2.setSize(1350,730); f2.setVisible(true); f1.s
我正在尝试创建一个像facebook一样的登录页面,但我写的代码并没有在左上角显示它而是显示在页面的中心,我使用GridBagLayout和anchore在FIRST_LINE_END设置文本.
final JFrame f2=new JFrame("Admin Main"); f2.setSize(1350,730); f2.setVisible(true); f1.setVisible(false); f2.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);![enter image description here][2] GridBagLayout gbl=new GridBagLayout(); final JPanel p2=new JPanel(gbl){ private Image img = ImageIO.read(new File("F:Untitled FolderRohanfootball2.jpg")); @Override protected void paintComponent( Graphics g ) { super.paintComponent(g); g.drawImage(img,1366,730,null); } };; GridBagConstraints g2=new GridBagConstraints(); g2.insets=new Insets(3,3,3); JLabel l2=new JLabel("Admin ID",JLabel.LEFT); JLabel l3=new JLabel("Password",JLabel.LEFT); l2.setFont(new Font("TimesRoman",Font.BOLD,16)); l2.setForeground(Color.BLUE); l2.setBackground(Color.WHITE); l3.setFont(new Font("TimesRoman",16)); l3.setForeground(Color.BLUE); l3.setBackground(Color.WHITE); final JTextField t1=new JTextField(15); final JPasswordField pw1=new JPasswordField(15); JButton b3=new JButton("Back"); JButton b4=new JButton("Sign in"); f2.add(p2); g2.anchor=GridBagConstraints.FIRST_LINE_END; g2.gridx=1; g2.gridy=1; p2.add(l2,g2); g2.gridx=2; g2.gridy=1; p2.add(t1,g2); g2.gridx=1; g2.gridy=2; p2.add(l3,g2); g2.gridx=2; g2.gridy=2; p2.add(pw1,g2); g2.gridx=1; g2.gridy=3; p2.add(b3,g2); g2.gridx=2; g2.gridy=3; p2.add(b4,g2); 解决方法
我在你当前的布局中看到两个问题:
>您将登录面板放在父BorderLayout的中心(这样您的面板就会拉伸到其容器的大小) 这里有几个选项: >您将登录面板嵌套到多个面板中(例如,使用BorderLayout,一次使用约束NORTH,第二次使用约束WEST). 以下是第二个解决方案的演示: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.net.MalformedURLException; import java.net.URL; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.SwingUtilities; public class TestLoginGridBagLayout { protected void initUI() throws MalformedURLException { JFrame frame = new JFrame("Admin Main"); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); JLabel background = new JLabel(new ImageIcon(new URL( "http://media1.santabanta.com/full1/Football/Football%20Abstract/football-abstract-6a.jpg"))) { @Override public Dimension getPreferredSize() { Dimension preferredSize = super.getPreferredSize(); Dimension layoutPreferredSize = super.preferredSize(); preferredSize.width = Math.max(preferredSize.width,layoutPreferredSize.width); preferredSize.height = Math.max(preferredSize.height,layoutPreferredSize.height); return preferredSize; } }; background.setLayout(new BorderLayout()); frame.add(background); GridBagLayout gbl = new GridBagLayout(); final JPanel loginPanel = new JPanel(gbl); loginPanel.setOpaque(false); background.add(loginPanel,BorderLayout.WEST); JLabel adminIDLabel = new JLabel("Admin ID",JLabel.LEFT); JLabel passwordLabel = new JLabel("Password",JLabel.LEFT); adminIDLabel.setFont(new Font("TimesRoman",16)); adminIDLabel.setForeground(Color.BLUE); adminIDLabel.setBackground(Color.WHITE); passwordLabel.setFont(new Font("TimesRoman",16)); passwordLabel.setForeground(Color.BLUE); passwordLabel.setBackground(Color.WHITE); final JTextField adminID = new JTextField(15); final JPasswordField password = new JPasswordField(15); JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING)); buttonPanel.setOpaque(false); JButton back = new JButton("Back"); JButton signIn = new JButton("Sign in"); buttonPanel.add(back); buttonPanel.add(signIn); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(3,3); gbc.anchor = GridBagConstraints.FIRST_LINE_END; loginPanel.add(adminIDLabel,gbc); gbc.gridwidth = GridBagConstraints.REMAINDER; loginPanel.add(adminID,gbc); gbc.gridwidth = 1; loginPanel.add(passwordLabel,gbc); gbc.gridwidth = GridBagConstraints.REMAINDER; loginPanel.add(password,gbc); loginPanel.add(buttonPanel,gbc); GridBagConstraints gbcFiller = new GridBagConstraints(); gbcFiller.weightx = 1.0; gbcFiller.weighty = 1.0; gbcFiller.fill = GridBagConstraints.BOTH; loginPanel.add(Box.createGlue(),gbcFiller); frame.pack(); frame.setVisible(true); } /** * @param args */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { try { new TestLoginGridBagLayout().initUI(); } catch (MalformedURLException e) { e.printStackTrace(); } } }); } } 我也冒昧地: >将变量重命名为有意义的名称(它使您的代码更容易为其他人阅读)>用JLabel替换自定义背景图像面板>使用另一个LayoutManager将按钮移动到嵌套面板>拍摄另一张背景图片,因为我没有你的照片. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- Hibernate映射文件id的generator配置方法
- java – 启用stomp后的activemq oom
- java – 如何从jtextfield和combobox中接收的值向
- Android 拍照功能代码
- springboot+thymeleaf国际化之LocaleResolver接口
- java IO流 之 输出流 OutputString()的使用
- 使用Java 9 JDK定位Java 6会发出警告
- Spring注解@RestControllerAdvice原理解析
- java-ee – 警告:JACC:对于URL模式xxx,除了以下
- Java Spring Controller 获取请求参数的几种方法
热点阅读