2

我知道您可以通过键入来创建一个按钮

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

但是我如何制作一个动作监听器,以便按钮为用户创建一个文本字段以提供输入......以及如何从该文本框中读取文本?

4

1 回答 1

5

Swing 没有文本框这样的动物——你是说 JTextField 吗?如果是这样,...

  • 您只需这样做就可以创建一个 JTextField ——new JTextField()
  • add(...)然后通过调用适当的容器(例如 JPanel)将其添加到您的 GUI 。
  • 然后,您只需调用getText()它即可阅读文本, JTextField 教程将解释所有这些。
  • 您还需要阅读有关布局管理器的教程,因为接受 JTextField 的容器必须具有可以容纳新组件的布局。
  • 在添加或删除组件后,您还需要在容器上调用revalidate()repaint(),以便容器布局管理器知道更新其布局并重新绘制自身。

这只是需要做的事情的一般要点。如果您需要更具体的建议,请告诉我们您的问题的详细信息、到目前为止您尝试过的方法以及有效或失​​败的方法。

编辑
你问:

但是我该怎么做才能使 textField 成为“弹出”而不是当前容器的添加。我有它,以便它添加到当前容器中......但这不是我需要的。

  • 最简单的方法是显示 JOptionPane.showInputDialog(...)。

例如:

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

这看起来像这样:
在此处输入图像描述

  • 一种更复杂的方法是创建一个 GUI 并将其显示在 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());;
  }

看起来像:
在此处输入图像描述

于 2012-04-10T01:08:39.527 回答