2013-05-06 51 views
1

我正在开发一个Java应用程序,并希望在定位某些标签和TextField时提供一些帮助。在框架上定位GUI对象

这是我的代码:

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JComboBox; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JTextField; 
import java.awt.BorderLayout; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.FlowLayout; 

public class AuctionClient 
{ 
public AuctionClient() 
{ 
    JFrame GUIFrame = new JFrame(); 
    JPanel GUIPanel = new JPanel(); 
    JLabel LabelUserName = new JLabel("UserName:"); 
    JTextField TextFieldUserName = new JTextField("        "); 

    JLabel LabelPassword = new JLabel("Password:"); 
    JTextField TextFieldPassword = new JTextField("        ");   

    GUIFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    GUIFrame.setTitle("Auction Client"); 
    GUIFrame.setSize(500,250); 

    GUIFrame.setLocationRelativeTo(null); 

    GUIPanel.add(LabelUserName); 
    GUIPanel.add(TextFieldUserName);   

    GUIPanel.add(LabelPassword); 
    GUIPanel.add(TextFieldPassword);   

    GUIFrame.add(GUIPanel, BorderLayout.NORTH); 
    GUIFrame.setVisible(true); 
} 
} 

与上面的代码中,LabelPassword和TextFieldPassword是在同一行作为LabelUsername和TextFieldUsername。我可以请帮助将LabelPassword和TextFieldPassword放在一个新行上。是否可以指定X,Y坐标来定位JFrame上的对象?

这里是展现你的形象如何,目前正在显示的对象:

enter image description here

http://canning.co.nz/Java/Positioning_Image.png

回答

5

您不应该尝试使用坐标定位组件。而是使用适当的LayoutManager's并使用逻辑条件和约束来定位组件。

下面是使用GridBagLayout一个例子:

import java.awt.BorderLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 

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 AuctionClient { 
    public AuctionClient() { 
     JFrame guiFrame = new JFrame(); 
     JPanel guiPanel = new JPanel(new GridBagLayout()); 
     JLabel userNameLabel = new JLabel("UserName:"); 
     JTextField userNameTextField = new JTextField(30); 

     JLabel passwordLabel = new JLabel("Password:"); 
     JTextField passwordTextField = new JPasswordField(30); 

     guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     guiFrame.setTitle("Auction Client"); 
     guiFrame.setSize(500, 250); 

     guiFrame.setLocationRelativeTo(null); 
     GridBagConstraints labelGBC = new GridBagConstraints(); 
     labelGBC.insets = new Insets(3, 3, 3, 3); 
     GridBagConstraints fieldGBC = new GridBagConstraints(); 
     fieldGBC.insets = new Insets(3, 3, 3, 3); 
     fieldGBC.gridwidth = GridBagConstraints.REMAINDER; 
     guiPanel.add(userNameLabel, labelGBC); 
     guiPanel.add(userNameTextField, fieldGBC); 

     guiPanel.add(passwordLabel, labelGBC); 
     guiPanel.add(passwordTextField, fieldGBC); 

     guiFrame.add(guiPanel, BorderLayout.NORTH); 
     guiFrame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new AuctionClient(); 
      } 
     }); 
    } 
} 
+0

@AndrewThompson没问题;-) – 2013-05-06 18:09:35

5
  • GridLayout, SpringLayout, GridBagLayout可以做,默认情况下

  • 最简单coud是GridLayout(2, 2, 10, 10)

    1. 但每JComponents是可调整大小与它的容器

    2. 必须改变为JLabel的水平alingment(setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);setHorizontalAlignment(JLabel.RIGHT);

    3. 确定(JTextField TextFieldUserName = new JTextField(20))的初始尺寸为任何的LayoutManager

+2

还要考虑''的GroupLayout,看到[这里](http://stackoverflow.com/a/8504753/230513)。 – trashgod 2013-05-06 11:30:53

+2

:)................. – mKorbel 2013-05-06 11:32:29

+2

我喜欢你放的点,因为你不仅可以张贴微笑。 +1 – Maroun 2013-05-06 11:39:54