2016-09-20 23 views
2

我想为一个人的出生日期添加3个组合框:一个为月份,然后是一天,然后是一年。当我添加所有3个组合框时,它会改变JTextFields的宽度。任何帮助如何解决这个问题将不胜感激。JComboBox在GridBagLayout中插入后更改JTextField宽度

还有没有更好的方法来添加JComboBox的月份,而不是一个接一个地插入?

下面是代码:

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

public class Home extends JFrame { 

    private JButton btnClear, btnNext; 
    private JTextField txtName, txtAddress, txtCity, txtState, 
      txtZipCode, txtPhoneNumber, txtEmail; 
    private JComboBox txtDate, txtYear, txtMonth; 
    private JLabel labelName, labelAddress, labelCity, labelState, 
      labelZipCode, labelPhoneNumber, labelEmail, labelDOB; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Home().setVisible(true); 
      } 
     }); 
    } 

    public Home() { 
     createView(); 

     setTitle("Job Hiring Systems"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(600, 500); 
     setMinimumSize(new Dimension(600, 500)); 
     //pack(); 
     setLocationRelativeTo(null); 
     setResizable(false); 
    } 

    private void createView() { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new BorderLayout()); 
     //panel.setBorder(new EmptyBorder(25,10,25,10)); 
     getContentPane().add(panel); 

     /* 
       * North Panel 
     */ 
     JPanel northPanel = new JPanel(); 
     northPanel.setBackground(Color.GRAY); 
     panel.add(northPanel, BorderLayout.NORTH); 

     JLabel labelWelcomeMessage = new JLabel("Welcome to the Job Hiring Systems"); 
     labelWelcomeMessage.setFont(new Font("Serif", Font.BOLD, 25)); 
     northPanel.add(labelWelcomeMessage, BorderLayout.CENTER); 
     /* 
       * End of North Panel 
     */ 

/* 
       * Center Panel 
     */ 
     JPanel centerPanel = new JPanel(); 
     centerPanel.setBackground(Color.yellow); 
     centerPanel.setSize(300, 300); 
     GridBagLayout layout = new GridBagLayout(); 

     centerPanel.setLayout(layout); 
     GridBagConstraints gbc = new GridBagConstraints(); 

     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     labelName = new JLabel("Enter your name: "); 
     labelName.setFont(new Font("Serif", Font.PLAIN, 15)); 
     centerPanel.add(labelName, gbc); 

     gbc.gridx = 1; 
     gbc.gridy = 0; 
     txtName = new JTextField(25); 
     txtName.setHorizontalAlignment(JTextField.CENTER); 
     txtName.setHorizontalAlignment(SwingConstants.LEFT); 
     centerPanel.add(txtName, gbc); 

     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     labelAddress = new JLabel("Enter your address: "); 
     labelAddress.setFont(new Font("Serif", Font.PLAIN, 15)); 
     centerPanel.add(labelAddress, gbc); 

     gbc.gridx = 1; 
     gbc.gridy = 1; 
     txtAddress = new JTextField(25); 
     txtAddress.setHorizontalAlignment(JTextField.CENTER); 
     txtAddress.setHorizontalAlignment(SwingConstants.LEFT); 
     centerPanel.add(txtAddress, gbc); 

     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 2; 
     labelCity = new JLabel("Enter your city: "); 
     labelCity.setFont(new Font("Serif", Font.PLAIN, 15)); 
     centerPanel.add(labelCity, gbc); 

     gbc.gridx = 1; 
     gbc.gridy = 2; 
     txtCity = new JTextField(25); 
     txtCity.setHorizontalAlignment(JTextField.CENTER); 
     txtCity.setHorizontalAlignment(SwingConstants.LEFT); 
     centerPanel.add(txtCity, gbc); 

     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 3; 
     labelState = new JLabel("Enter your State: "); 
     labelState.setFont(new Font("Serif", Font.PLAIN, 15)); 
     centerPanel.add(labelState, gbc); 

     gbc.gridx = 1; 
     gbc.gridy = 3; 
     txtState = new JTextField(25); 
     txtState.setHorizontalAlignment(JTextField.CENTER); 
     txtState.setHorizontalAlignment(SwingConstants.LEFT); 
     centerPanel.add(txtState, gbc); 

     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 4; 
     labelZipCode = new JLabel("Enter your Zip Code: "); 
     labelZipCode.setFont(new Font("Serif", Font.PLAIN, 15)); 
     centerPanel.add(labelZipCode, gbc); 

     gbc.gridx = 1; 
     gbc.gridy = 4; 
     txtZipCode = new JTextField(25); 
     txtZipCode.setHorizontalAlignment(JTextField.CENTER); 
     txtZipCode.setHorizontalAlignment(SwingConstants.LEFT); 
     centerPanel.add(txtZipCode, gbc); 

     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 5; 
     labelPhoneNumber = new JLabel("Enter your Phone Number: "); 
     labelPhoneNumber.setFont(new Font("Serif", Font.PLAIN, 15)); 
     centerPanel.add(labelPhoneNumber, gbc); 

     gbc.gridx = 1; 
     gbc.gridy = 5; 
     txtPhoneNumber = new JTextField(25); 
     txtPhoneNumber.setHorizontalAlignment(JTextField.CENTER); 
     txtPhoneNumber.setHorizontalAlignment(SwingConstants.LEFT); 
     centerPanel.add(txtPhoneNumber, gbc); 

     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 6; 
     labelEmail = new JLabel("Enter your Email: "); 
     labelEmail.setFont(new Font("Serif", Font.PLAIN, 15)); 
     centerPanel.add(labelEmail, gbc); 

     gbc.gridx = 1; 
     gbc.gridy = 6; 
     txtEmail = new JTextField(25); 
     txtEmail.setHorizontalAlignment(JTextField.CENTER); 
     txtEmail.setHorizontalAlignment(SwingConstants.LEFT); 
     centerPanel.add(txtEmail, gbc); 

     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 0; 
     gbc.gridy = 7; 
     labelDOB = new JLabel("Enter your Date of Birth: "); 
     labelDOB.setFont(new Font("Serif", Font.PLAIN, 15)); 
     centerPanel.add(labelDOB, gbc); 

     gbc.gridx = 1; 
     txtMonth = new JComboBox(); 
     txtMonth.addItem("January"); 
     txtMonth.addItem("February"); 
     txtMonth.addItem("March"); 
     txtMonth.addItem("April"); 
     txtMonth.addItem("May"); 
     txtMonth.addItem("June"); 
     txtMonth.addItem("July"); 
     txtMonth.addItem("August"); 
     txtMonth.addItem("September"); 
     txtMonth.addItem("October"); 
     txtMonth.addItem("November"); 
     txtMonth.addItem("December"); 
     centerPanel.add(txtMonth, gbc); 

     gbc.gridx = 2; 
     txtDate = new JComboBox(); 
     for (int i = 0; i < 31; i++) { 
      txtDate.addItem(i); 
     } 
     centerPanel.add(txtDate, gbc); 

     gbc.gridx = 3; 
     txtYear = new JComboBox(); 
     for (int i = 1940; i < 2017; i++) { 
      txtYear.addItem(i); 
     } 
     centerPanel.add(txtYear, gbc); 
     panel.add(centerPanel); 

     /* 
       * End of Center Panel 
     */ 

/* 
       * South Panel 
     */ 
     JPanel southPanel = new JPanel(); 
     southPanel.setBackground(Color.GREEN); 
     panel.add(southPanel, BorderLayout.SOUTH); 

     btnClear = new JButton("CLEAR"); 
     southPanel.add(btnClear, BorderLayout.CENTER); 

     btnNext = new JButton("NEXT"); 
     southPanel.add(btnNext, BorderLayout.WEST); 
     /* 
       * End of South Panel 
     */ 
    } 
} 
+0

您能否澄清一下您希望JTextField看起来如何? – Daneel

+0

我希望JTextFields与JComboBox的长度相同,但在添加JComboBox之前,我将文本字段长度设置为25像素,但添加组合框后,所有文本字段宽度都变短了。 –

+0

您传递给'JTextField'构造函数是列,而不是像素。 – user1803551

回答

2

当我加入所有3组合框,它改变了JTextField的宽度。任何帮助如何解决这个问题将不胜感激。

默认情况下,GridBagLayout中的每个组件占用1个单元格(一个空间垂直,一个水平)。每次添加组合框时,都会增加网格中的列数,但文本字段仍然会占用1个水平空间,与第一个组合框对齐。

enter image description here

你想要的文本字段赞同最后组合框,或者换句话说,采取一切空间保持在网格中。您可以通过指定

gbc.gridwidth = GridBagConstraints.REMAINDER; 

为您的文本字段。 (在你的情况下,gbc.gridwidth = 3也可以,但如果你添加更多的组件,你可能需要改变它。)

请注意,由于布局管理器为组件分配空间,在文本域的构造函数中指定一个数字没有太多,

还有一种更好的方式来添加JComboBox的月份,而不是一个接一个地插入它。

是的,我建议你利用新的Date-Time API。有一个Enum Month,你的常数准备就绪。不要忘了指定泛型类型为你的组合框:

JComboBox<Month> txtMonth = new JComboBox<>(); 
for (Month month : Month.values()) 
    txtMonth.addItem(month); 

,我就不打扰你修正自己的资本(提示:getDisplayName)。

+0

感谢您的帮助 –

0

关于第二个问题,您可以直接与月的阵列创建的JComboBox:

String[] months = {"January", ..., "December"}; // put all the months here 
JComboBox txtMonth = new JComboBox(months); 

编辑:

为了您的第一个问题:如果您希望每个JTextField的长度与三个JComboBox的长度相同,那么您应该写在添加任何JTextField之前添加。

详见这里(中间主要的例子,它是真正清楚):https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

+0

感谢您的帮助 –