【问题标题】:Get a String from a JTextField through a JButton通过 JButton 从 JTextField 获取字符串
【发布时间】:2015-05-23 14:10:52
【问题描述】:

我正在编写一个程序,我几乎完成了。我想要的是:在 JTextField 中输入一个字符串,按下一个 JButton,我希望字符串出现在另一个 JTextField 中。所以我有:2 个 JTextField 和 1 个按钮。这是我的代码:

class Fenster extends JFrame {
JTextField inputfield;
JTextField outputfield;
JButton button;
public Fenster() {

    JTextField outputfield = new JTextField();
    outputfield.setBounds(50, 315, 400, 32);
    add(outputfield);

JTextField inputfield = new JTextField();
    inputfield.setBounds(50, 115, 400, 32);
    add(inputfield);
//The Button
JButton button = new JButton("Klick me :D");
    button.setBounds(154, 250, 92, 32);
    button.addActionListener(new buttonlistener());
    add(button);

private class buttonlistener implements ActionListener {

    public void actionPerformed(ActionEvent e) {
String string = inputfield.getText();
outputfield.setText(string);

}
}
}

我知道我没有包含 JFrame 设置。请帮忙,因为每次我按下按钮时都会出现错误:“buttonlistener.actionPerformed(Fenster.java:70)”出现:S

提前致谢

【问题讨论】:

  • buttonlistener.actionPerformed(Fenster.java:70) 发布的示例中没有 70 行代码。 1) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。 2) 使用逻辑一致的形式缩进代码行和块。缩进是为了让代码流更容易理解! 3)始终复制/粘贴错误和异常输出(整个堆栈跟踪,除非它大于站点字符限制)! ..
  • .. 4) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。
  • .. 哦,还有 5) 请学习常见的 Java 命名法(命名约定 - 例如EachWordUpperCaseClassfirstWordLowerCaseMethod()firstWordLowerCaseAttribute,除非它是 UPPER_CASE_CONSTANT)并始终如一地使用它。
  • “我正在做一个程序,我快完成了。” 希望我每次听到这句话都能得到一美元。 ;)

标签: java string swing button nullpointerexception


【解决方案1】:

字段outputfieldinputfield 被声明为Fenster 类的属性和Fenster 构造函数的局部变量。

我们在面板上看到的是本地声明的,但是动作监听器试图使用声明为从未初始化的类属性的那些。因此NullPointerException

【讨论】:

    【解决方案2】:

    您可以在初始化ActionListener 时直接实现它,而不是为其创建单独的函数。

    //The Button
    JButton button = new JButton("Klick me :D");
    button.setBounds(154, 250, 92, 32);
    button.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            String string = inputfield.getText();
            outputfield.setText(string);
        }
    });
    add(button);
    

    【讨论】:

    • Java 8 的 lambda 使创建侦听器变得更加容易:addActionListener(e -> { ... }); 而不是创建匿名类
    • -1 :这些答案虽然在 Java 中的每个编码选项都是正确的,但从问题的角度来看却非常不相关。 @Andrew Thompson 给出了正确的答案。
    • 天哪,它有效,伙计,我爱你,嗯,我的意思是,谢谢它真的帮助了我。
    • @ringbearer,是的,如果您想了解为什么问题中的代码不起作用的完整技术细节,请查看其他答案。如果你真的想要一个解决方案,比我在我的回答中给出的答案。
    【解决方案3】:

    我无法准确解读您的要求。所以我只是假设你的要求


    “如何让我的字符串输出到 JButton?”

    我将给你我曾经这样做的代码。现在,我创建了一个字符串值,您就可以开始编码了!:
    import java.util.*;
    import java.awt.*;
    import javax.swing.*;
    import java.lang.Object;
    import java.io.*;
    import javax.imageio.*;
    
    public class jframetest extends Object
    {
        public static void main(String args[]) throws Exception  
        {
    
            JFrame frame = new JFrame("Not Main");
    
                            /* Background Image*/
    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     *       JLabel image = new JLabel(new ImageIcon("a.jpg"));        *
     *       image.setBounds(0,0, 800, 600);                           *
     *       frame.getContentPane().add(image, BorderLayout.CENTER);   *
     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    
            Random generate = new Random();
            Random rand = new Random();
    
            String[] name =    {"Landry", "Azariah", "Oakley", "Lennon", "Charlie", "Skyler", "Dakota", "Armani", "Phoenix" , "Justice", "Casey", "Emory", "Remy", "Emerson", "Amari", "Roxie", "Hayden", "River", "Milan", "Tatum", "Jessie", "Finley", "Riley", "Rowan", "Sage", "Jamie", "Rory", "Harley", "Leighton", "Peyton", "Dallas", "Remington", "Quinn", "Alexis", "Sawyer", "Kamryn", "Parker", "Avery", "Eden", "Lyric", "Elliot", "Reese", "Zion", "Rylan", "Jordan", "Taylor", "Morgan", "Kendall", "Rylee", "Ryan", "Reagan", "Logan", "Hunter", "Carter"};
    
    
      int index = (int) (Math.random() * (name.length - 1));
    
      JButton buttun = new JButton(name[index]);
      buttun.setBounds(190,65,400,50);
    
      JLabel label2 = new JLabel("Customer: " + name[generate.nextInt(20)]);
      label2.setBounds(190,65,400,50); //setBounds(x,y,width,height);
      label2.setFont(new Font("Serif", Font.BOLD, 40));
    
    
    
      frame.setPreferredSize(new Dimension(200, 200));     
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      //frame.getContentPane().add(button); (not needed when Background Image is commented) 
      frame.setVisible(true);
      frame.pack();
      frame.add(buttun);
      frame.add(label2);   
      frame.setSize(800, 600);
      frame.setLayout(null);
    
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2021-06-24
      • 2012-03-12
      • 1970-01-01
      相关资源
      最近更新 更多