2016-12-24 4 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의 어린 아이 추가되는 동안 라벨 아무 생각 이 없기 때문에 그래서,이 보여하는 방법을 보여주는 아니에요.

이이 당신이 달성하려고하는지에 따라 해결하는 방법은 여러 가지가 될 수 있습니다 그것에 JTextField를을

  • 을 JLabel의에게 레이아웃 매니저를 부여 한 다음 추가 :하지만 그때 JTextField를 을 커버 JLabel, 텍스트 (있는 경우) 및 아이콘 (있는 경우), 좋지 않습니다.
  • 둘 다 보유 할 JPanel을 만들고 적절한 레이아웃 관리자를 지정하십시오. 아마도 좋은 선택 일 것입니다.
  • 두 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는 니모닉 문자에 밑줄가 문자 그 JLabel의이 setLabelFor(...)를 통해 연결되었다는의 JTextField에 포커스를 가져올 것이다 ALT 키 함께 누르면,이 코드에 의해 발생하는 경우 :

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); 
관련 문제