2016-12-24 10 views
-2

ラベルにテキストフィールドが必要ですが、このコードを実行すると、画面にテキストフィールドが表示されません。どのように私はそれを修正することができます。JTextFieldとJLabelを一緒に使用するにはどうすればいいですか?

JFrame jf = new JFrame() ; 

JPanel panel = new JPanel() ; 

JLabel label = new JLabel() ; 

JTextField tField = new JTextField("asd" , 10) ; 

label.add(tField) ; 
panel.add(label) ; 

jf.setSize(500,400) ; 
jf.add(panel) ; 
jf.setVisible(true) ; 

答えて

3

のJLabel年代には、デフォルトのレイアウトマネージャを持っていない、とあなたのJTextField あるは、彼がJLabelのTOT追加されながらラベルは考えを持っていないのでので、がそれを表示する方法を示していません。

あなたが達成しようとしているものに応じてこれを解決するには、いくつかの方法が存在することができます:

  • のJLabelにレイアウトマネージャを付け、それにJTextFieldを追加します。しかし、その後のJTextField カバー JLabel、そのテキスト(存在する場合)とそのアイコン(もしあれば)、良くない。
  • 両方を保持するJPanelを作成し、適切なレイアウトマネージャーを与えます。おそらく良い選択です。
  • 簡単に関連付けることができるレイアウトマネージャーを使用して、同じJPanelに両方を追加します。別の良い賭けです。 GridBagLayoutはこれに対してうまく機能します。

もたとえばとしてJLabel Tutorial

ごとに、JTextFieldをしてしっかりと関連付けることのJLabelのsetLabelFor(...)メソッドを呼び出すことを忘れないでください:

として表示さ

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.KeyEvent; 
import java.util.HashMap; 
import java.util.Map; 
import javax.swing.*; 

public class GridBagEg { 
    private static void createAndShowGui() { 
     PlayerEditorPanel playerEditorPane = new PlayerEditorPanel(); 

     int result = JOptionPane.showConfirmDialog(null, playerEditorPane, "Edit Player", 
       JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 
     if (result == JOptionPane.OK_OPTION) { 
      // TODO: do something with info 

      for (PlayerEditorPanel.FieldTitle fieldTitle : PlayerEditorPanel.FieldTitle.values()) { 
       System.out.printf("%10s: %s%n", fieldTitle.getTitle(), 
         playerEditorPane.getFieldText(fieldTitle)); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGui(); 
      } 
     }); 
    } 
} 

@SuppressWarnings("serial") 
class PlayerEditorPanel extends JPanel { 
    enum FieldTitle { 
     NAME("Name", KeyEvent.VK_N), SPEED("Speed", KeyEvent.VK_P), STRENGTH("Strength", KeyEvent.VK_T); 
     private String title; 
     private int mnemonic; 

     private FieldTitle(String title, int mnemonic) { 
      this.title = title; 
      this.mnemonic = mnemonic; 
     } 

     public String getTitle() { 
      return title; 
     } 

     public int getMnemonic() { 
      return mnemonic; 
     } 
    }; 

    private static final Insets WEST_INSETS = new Insets(5, 0, 5, 5); 
    private static final Insets EAST_INSETS = new Insets(5, 5, 5, 0); 
    private Map<FieldTitle, JTextField> fieldMap = new HashMap<FieldTitle, JTextField>(); 

    public PlayerEditorPanel() { 
     setLayout(new GridBagLayout()); 
     setBorder(BorderFactory.createCompoundBorder(
       BorderFactory.createTitledBorder("Player Editor"), 
       BorderFactory.createEmptyBorder(5, 5, 5, 5))); 
     GridBagConstraints gbc; 
     for (int i = 0; i < FieldTitle.values().length; i++) { 
      FieldTitle fieldTitle = FieldTitle.values()[i]; 
      JLabel label = new JLabel(fieldTitle.getTitle() + ":", JLabel.LEFT); 
      JTextField textField = new JTextField(10); 
      label.setDisplayedMnemonic(fieldTitle.getMnemonic()); 
      label.setLabelFor(textField); 
      gbc = createGbc(0, i); 
      add(label, gbc); 
      gbc = createGbc(1, i); 
      add(textField, gbc); 

      fieldMap.put(fieldTitle, textField); 
     } 
    } 

    private GridBagConstraints createGbc(int x, int y) { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridx = x; 
     gbc.gridy = y; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 

     gbc.anchor = (x == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST; 
     gbc.fill = (x == 0) ? GridBagConstraints.BOTH : GridBagConstraints.HORIZONTAL; 

     gbc.insets = (x == 0) ? WEST_INSETS : EAST_INSETS; 
     gbc.weightx = (x == 0) ? 0.1 : 1.0; 
     gbc.weighty = 1.0; 
     return gbc; 
    } 

    public String getFieldText(FieldTitle fieldTitle) { 
     return fieldMap.get(fieldTitle).getText(); 
    } 

} 

enter image description here

JLabels h aveが、ニーモニック文字に下線を中に押すと、Altキーの組み合わせは、JLabelのがsetLabelFor(...)、経由にリンクされた、このコードによって引き起こされていることのJTextFieldにフォーカスをもたらすという文字:

FieldTitle fieldTitle = FieldTitle.values()[i]; // an enum that holds label texts 
JLabel label = new JLabel(fieldTitle.getTitle() + ":", JLabel.LEFT); // create JLabel 
JTextField textField = new JTextField(10); // create JTextField 

// set the label's mnemonic -- brings focus to the linked text field 
label.setDisplayedMnemonic(fieldTitle.getMnemonic()); 

// *** here we *link* the JLabel with the JTextField 
label.setLabelFor(textField); 
関連する問題