2016-09-20 4 views
2

人の生年月日に3つのコンボボックスを追加しようとしています:1つは月、1日、1年です。 3つのコンボボックスをすべて追加すると、JTextFieldsの幅が変更されます。この問題を解決する方法についてのご意見は、大歓迎です。JComboBoxはGridBagLayoutに挿入した後にJTextFieldの幅を変更します

JComboBoxの月に1つずつ挿入するのではなく、それを追加する方が良いでしょうか?ここで

コードです:あなたの2番目の質問については

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が3 JComboBoxの長さと同じになるようにしたいが、JComboBoxを追加する前に、テキストフィールドの長さを25ピクセルに設定したが、コンボボックスを追加した後、テキストフィールドの幅はすべて短くなった。 –

+0

'JTextField'コンストラクタはピクセルではなくカラムです。 – user1803551

答えて

2

私はすべての3コンボボックスを追加すると、それはのJTextFieldの幅を変更します。この問題を解決する方法についてのご意見は、大歓迎です。

GridBagLayoutの各コンポーネントは、デフォルトで1セル(縦1スペース、横1セル)を占有します。コンボボックスを追加するたびに、グリッドの列数が増えますが、テキストフィールドは最初のコンボボックスに合わせて1つの水平スペースをとります。

enter image description here

あなたはグリッドに残るものは何でもスペース取るために、最後のコンボボックスで、または他の言葉で自分自身を整列するテキストフィールドをしたいです。テキストフィールドには、

gbc.gridwidth = GridBagConstraints.REMAINDER; 

を指定してください。 (あなたの場合はgbc.gridwidth = 3でも動作しますが、コンポーネントを追加する場合は変更する必要があります)

レイアウトマネージャはコンポーネントにスペースを割り当てるので、テキストフィールドのコンストラクタで数値を指定すると、

また、JComboBoxを月単位で追加するよりも、それを1つずつ挿入するのではなく、より良い方法があります。

はい、新しい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); 

EDIT:あなたのために

最初の質問:すべてのJTextFieldを3つのJComboBoxと同じ長さにしたい場合は、JTextFieldを追加する前にを参照してください。

はここに多くを参照してください(途中でほとんど例が、それは本当に明確である):https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

+0

助けてくれてありがとう –

関連する問題