如何在Java中创建一个创建文本字段的GUI按钮?

时间:2012-04-10 01:04:51

标签: java swing user-interface

我知道你可以输入

创建一个按钮
JButton x= new JButton("Something");
x.addActionListener(this);

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

1 个答案:

答案 0 :(得分:5)

Swing没有像文本框那样的动物 - 你的意思是JTextField吗?如果是这样,......

  • 您只需执行此操作即可创建JTextField - new JTextField()
  • 然后通过在适当的容器(如JPanel)上调用add(...)将其添加到GUI中。
  • 然后,您只需在其上调用getText()即可阅读该文字,JTextField tutorials将解释所有这些内容。
  • 您还需要阅读布局管理器上的教程,因为接受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);

这看起来像这样:
enter image description here

  • 更复杂的方法是创建一个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());;
  }

看起来像:
enter image description here