2012-04-10 2 views
2

Я знаю, что вы можете создать кнопку, набравКак создать кнопку GUI в Java, которая создает текстовое поле?

JButton x= new JButton("Something"); 
x.addActionListener(this); 

Но как мне сделать ActionListener так, что кнопка создает текстовое поле Ф.О. пользователю обеспечить ввод .... и как я могу читать текст из этого текстового поля?

ответ

5

Свинг не имеет такого животного, как текстовое поле - вы имеете в виду JTextField? Если да, то ...

  • Вы бы создать JTextField просто делать только что - new JTextField()
  • Тогда бы добавить его в свой графический интерфейс, вызвав add(...) на соответствующем контейнере, таком как JPanel.
  • Затем вы прочитали текст, просто набрав getText(), и JTextField tutorials объяснит все это.
  • Вы также захотите прочитать руководство по менеджерам макетов, поскольку контейнер, который принимает JTextField, должен иметь макет, который может вместить новый компонент.
  • Вы также захотите вызвать revalidate() и repaint() на контейнер после добавления или удаления компонентов, чтобы менеджер компоновки контейнеров знал, чтобы обновить его макет и перекрасить.

Это всего лишь общая суть того, что необходимо сделать. Если вам требуется более конкретный совет, сообщите нам подробную информацию о своей проблеме, о том, что вы пробовали до сих пор, и что сработало или не удалось.

Редактировать
Вы спрашиваете:

Но как мне это сделать так, чтобы текстовое поле является «всплывал», а не дополнение к текущей емкости. У меня это так, что он добавляет к текущему контейнеру ... но это не то, что мне нужно.

  • Самый простой способ сделать это, отображая JOptionPane.showInputDialog (...).

Например:

// myGui is the currently displayed GUI 
    String foo = JOptionPane.showInputDialog(myGui, "Message", "Title", 
     JOptionPane.PLAIN_MESSAGE); 
    System.out.println(foo); 

Это будет выглядеть так:
enter image description here

  • Более сложный способ сделать это, чтобы создать графический интерфейс и отобразить его в JOptionPane, и запрос GUI для его содержимого.

Например:

JTextField fooField = new JTextField(15); 
    JTextField barField = new JTextField(15); 
    JPanel moreComplexPanel = new JPanel(new GridBagLayout()); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.insets = new Insets(5, 5, 5, 5); 
    gbc.weightx = 1.0; 
    gbc.weighty = 1.0; 
    gbc.anchor = GridBagConstraints.WEST; 
    moreComplexPanel.add(new JLabel("Foo:"), gbc); 
    gbc.gridx = 1; 
    gbc.anchor = GridBagConstraints.EAST; 
    moreComplexPanel.add(fooField, gbc); 
    gbc.gridx = 0; 
    gbc.gridy = 1; 
    gbc.anchor = GridBagConstraints.WEST; 
    moreComplexPanel.add(new JLabel("Bar:"), gbc); 
    gbc.gridx = 1; 
    gbc.anchor = GridBagConstraints.EAST; 
    moreComplexPanel.add(barField, gbc); 

    int result = JOptionPane.showConfirmDialog(myGui, moreComplexPanel, 
     "Foobars Forever", JOptionPane.OK_CANCEL_OPTION, 
     JOptionPane.PLAIN_MESSAGE); 
    if (result == JOptionPane.OK_OPTION) { 
    System.out.println("foo = " + fooField.getText());; 
    System.out.println("bar = " + barField.getText());; 
    } 

Какой будет выглядеть так:
enter image description here

+1

@ user1261445: Там родственный пример [здесь] (http://stackoverflow.com/a/5812981/ 230513), который может начать работу с [sscce] (http://sscce.org/). – trashgod

+0

Но как это сделать, чтобы textField был «всплывающим», а не добавлением к текущему контейнеру. У меня это так, что он добавляет к текущему контейнеру ... но это не то, что мне нужно. – user1261445

+0

@ user1261445: см. Править, чтобы ответить выше. –

Смежные вопросы