JLabel的用户输入

时间:2016-04-26 17:10:25

标签: java user-interface actionlistener joptionpane

我遇到一段代码问题。当我在我的GUI中点击它时,它会在我输入文本后重新打开。任何人都可以向我解释代码有什么问题。我正在使用它在我的GUI中的JLabel中设置名称

setNameButton.addActionListener((ActionEvent e) -> {

    String usernameinput;
    String defaultUsername = "dom" + "baker";

    usernameinput = JOptionPane.showInputDialog(
        setNameButton, "Enter a username", 
        "Set username", JOptionPane.OK_CANCEL_OPTION);
    {
        username.setText(String.valueOf(usernameinput));    
    }
});

2 个答案:

答案 0 :(得分:0)

因为这个

,你的代码就像那样
setNameButton.addActionListener((ActionEvent e) -> {
            String usernameinput;
            String defaultUsername = "dom"
                    + "baker";
            usernameinput = JOptionPane.showInputDialog(null,

正如您所看到的,JOptionPane.showInputDialog(setNameButton setNameButton 作为参数,因此您处于某种递归无限循环中

使用modalDialog的另一个按钮:

实施例

setNameButton.addActionListener((ActionEvent e) -> {
            String usernameinput;
            String defaultUsername = "dom"
                    + "baker";
            usernameinput = JOptionPane.showInputDialog(null, "Enter a username", "Set username", JOptionPane.OK_CANCEL_OPTION);
            {
                username.setText(String.valueOf(usernameinput));

            }
        });

答案 1 :(得分:0)

我创建了一个简单的GUI来测试你的代码,对话框只打开一次。 我已经清理了一下你的听众,但基本上它是相同的代码。 您的问题可能出在代码的另一部分。

  import java.awt.Component;
  import java.awt.Dimension;
  import java.awt.event.ActionEvent;

  import javax.swing.Box;
  import javax.swing.BoxLayout;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JOptionPane;
  import javax.swing.JPanel;
  import javax.swing.SwingUtilities;

  public class SimpleFrameTest extends JFrame {

  JLabel username = new JLabel("Press button to enter your name here");

   public SimpleFrameTest() {

        setSize(300, 300);
        setTitle("Test");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(true);

        initComponents();

        setVisible(true);

    }

    private void initComponents() {

        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        username.setAlignmentX(Component.CENTER_ALIGNMENT);

        JButton setNameButton = new JButton("Set name");
        setNameButton.setAlignmentX(Component.CENTER_ALIGNMENT);

        setNameButton.addActionListener((ActionEvent e) -> {
             String usernameinput = JOptionPane.showInputDialog(setNameButton, "Enter a username", "Set username", JOptionPane.OK_CANCEL_OPTION);

             if (usernameinput != null) {
                 username.setText(String.valueOf(usernameinput));
             }
        });

        panel.add(Box.createRigidArea(new Dimension(5,10)));
        panel.add(username);
        panel.add(Box.createRigidArea(new Dimension(5,10)));
        panel.add(setNameButton);
        add(panel);

    }


    public static void main(String args[]){

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new SimpleFrameTest();

        }
    });   

   }  

 }