簡體   English   中英

使用方法添加JTextField時從JTextField檢索文本

[英]Retrieving text from a JTextField when using a method to add the JTextField

我目前正在學習如何在Java中使用Swing。 當向JPanel添加JTextFields,JLabels或JButtons時,我通常在以下4行中這樣做:

gbc.gridx = 0;
gbc.gridy = 0;
JTextField example = new JTextField("", 6);
p.add(example, gbc);

但是我試圖通過制作這樣的方法來壓縮我的代碼:

public static void addTextField (JPanel p, GridBagConstraints gbc, String str, int x, int y, int len) {
gbc.gridx = x;
gbc.gridy = y;
JTextField tempTF = new JTextField(str, len);
p.add(tempTF, gbc);
}

並在主要方法中調用addTextField(),例如:

ClassName.addTextField(p2, gbc, "", 1, 1, 6);

我的問題是如何在JTextField中檢索文本。 就像是,

String str = example.getText();

要么

String str2 = tempTF.getText();

通常可以正常工作,現在不再有效。

關於如何解決這個問題有什么想法嗎?

這是我正在使用的完整代碼,之前沒有任何答案:

/**
* This program creates two windows.
* Window #1 displays Hello World
* WIndow #2 prompts users to input information
*/

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MessingWithSwing extends JFrame{

  //Main Method
  public static void main(String[] args) { 
    //makes the first window
    MessingWithSwing window1 = new MessingWithSwing("Window #1", 300, 300);
    //makes the second window with minimum dimensions
    MessingWithSwing window2 = new MessingWithSwing("Window #2", 450, 300, 300, 300);

    //GridBagConstraints allows the objects in each panel to be positioned in grid cordinates
    GridBagConstraints gbc = new GridBagConstraints();
    //sets the spaces between each grid position
    gbc.insets = new Insets(10, 10, 10, 10);

    //creates a JPanel that uses a grid layout
    JPanel p1 = new JPanel(new GridBagLayout());
    //adds the panel in the center of window1
    window1.add(p1, BorderLayout.CENTER);
    //sets the panel visible so it can correctly display the labels, textfields, and buttons
    p1.setVisible(false);

    //uses the method created below to add JLabels to p1
    MessingWithSwing.addLabel(p1, gbc, "Hello", 0, 0);
    MessingWithSwing.addLabel(p1, gbc, "World", 0, 1);

    p1.setVisible(true);

    //creates a second JPanel that also uses a grid layout
    JPanel p2 = new JPanel(new GridBagLayout());
    //adds the panel at the top of window2
    window2.add(p2, BorderLayout.NORTH);
    //sets the panel visible so it can correctly display the labels, textfields, and buttons
    p2.setVisible(false);

    //uses the method created below to add JLabels to p2
    MessingWithSwing.addLabel(p2, gbc, "Please Enter The Following", 0, 0);
    MessingWithSwing.addLabel(p2, gbc, "Name: ", 0, 1);
    MessingWithSwing.addLabel(p2, gbc, "Age: ", 0, 2);

    //uses the method created below to add JTextFields to p2
    MessingWithSwing.addTextField(p2, gbc, "", 1, 1, 6);
    MessingWithSwing.addTextField(p2, gbc, "<age>", 1, 2, 6);

    //uses the method created below to add a JButton to p2
    MessingWithSwing.addButton(p2, gbc, "Enter", 0, 3);

    p2.setVisible(true);

    /* Issue:
     * The someting like the line below would not work
     * How would you access the text inputted into each JTextField?
     */
//    String str = tempTF.getText();

  } //end of Main Method

  //first constructor makes a window that is completely resizable
  public MessingWithSwing(String title, int sizeX, int sizeY) {
    super(title);
    setSize(sizeX, sizeY);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
  }

  //second constructor makes a window that is resizable but has minimum dimensions
  public MessingWithSwing(String title, int sizeX, int sizeY, int minSizeX, int minSizeY) { 
    super(title);
    setSize(sizeX, sizeY);
    setMinimumSize(new Dimension(minSizeX, minSizeY));
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
  }

  //This method adds a JLabel with an indicated text, at an indicated GridBagConstraints location, to an indicated JPanel
  public static void addLabel(JPanel p, GridBagConstraints gbc, String str, int x, int y) {
    gbc.gridx = x;
    gbc.gridy = y;
    JLabel tempLabel = new JLabel(str);
    p.add(tempLabel, gbc);
  }

  //This method adds a JTextField with an indicated length and text, at an indicated GridBagConstraints location, to an indicated JPanel
  public static void addTextField (JPanel p, GridBagConstraints gbc, String str, int x, int y, int len) {
    gbc.gridx = x;
    gbc.gridy = y;
    JTextField tempTF = new JTextField(str, len);
    p.add(tempTF, gbc);
  }

  //This method adds a JButton with an indicated text, at an indicated GridBagConstraints location, to an indicated JPanel
  public static void addButton (JPanel p, GridBagConstraints gbc, String str, int x, int y) {
    gbc.gridx = x;
    gbc.gridy = y;
    JButton tempB = new JButton(str);
    p.add(tempB, gbc);
  }

}

因此,如果我正確理解Kequiang Li,它的外觀將類似於:

public static JTextField addTextField (JPanel p, GridBagConstraints gbc, String str, int x, int y, int len) {
    gbc.gridx = x;
    gbc.gridy = y;
    JTextField tempTF = new JTextField(str, len);
    p.add(tempTF, gbc);
    return tempTF;
  }

然后:

ArrayList<JTextField> tfList = new ArrayList<JTextField>();
tfList.add(ClassName.addTextField(p1,gbc,text,0,0,8));
String str = tfList.get(0).getText();

如何在文本字段中獲取文本完全取決於要在何時何地獲取文本。

假設您想隨時檢索文本,然后可以使addTextField返回它已添加的文本字段。 這樣,您可以跟蹤列表,數組甚至是映射中的所有文本字段,而只需在這些文本字段上調用getText

在另一種情況下,您可能僅在用戶在文本字段中按下Enter鍵時才需要文本,然后可以將偵聽器綁定到文本字段。 事件發生時,您可以訪問事件的源(即文本字段),然后檢索文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM