对象 - Java JButton数组初始化后还是空?
问题描述
import java.awt.Container;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.rmi.server.Operation;import java.text.Normalizer.Form;import java.util.ArrayList;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextField;public class Calc extends JFrame implements ActionListener{ JTextField text; JButton[] myBtns = new JButton[16];String[] btnName = {'7','8','9','+','4','5','6','-','1','2','3','*','C','0','=','/'}; public Calc() {super('计算器界面练习');this.setBounds(200, 0, 635,600);Container content = this.getContentPane();FlowLayout flow = new FlowLayout();flow.setAlignment(FlowLayout.LEFT);content.setLayout(flow);text = new JTextField('0123');text.setPreferredSize(new Dimension(600, 100));text.setEditable(false);text.setHorizontalAlignment(JTextField.RIGHT);text.setFont(new Font('宋体',Font.PLAIN , 80));content.add(text);int index = 0;for (JButton btn : myBtns){ btn = new JButton(btnName[index]); btn.setPreferredSize(new Dimension(145,100)); btn.setFont(new Font('Times New Roman',Font.BOLD,80)); btn.addActionListener(this); content.add(btn); index++;}setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }@Override public void actionPerformed(ActionEvent e) {ArrayList<String> array = new ArrayList<String>();System.out.println(myBtns[0]);//为什么是Nullarray.add(e.getActionCommand());System.out.println(e.getSource());text.setText(text.getText()+e.getActionCommand()); }}
运行结果如下图,按钮都显示出来了,为什么输出是Null?

问题解答
回答1:Java foreach语句中的btn只是遍历myBtns的备份(传值),并不是引用。引用相当于对原始数据做操作,赋值相当于对原始数据的副本做操作。所以要在foreach中加一句myBtns[index] = btn;
for (JButton btn : myBtns){ btn = new JButton(btnName[index]); myBtns[index] = btn; btn.setPreferredSize(new Dimension(145,100)); btn.setFont(new Font('Times New Roman',Font.BOLD,80)); btn.addActionListener(this); content.add(btn); index++;}
相关文章:
1. vue.js - android环境下在vue中引入vux.js 报错。2. 无法为JSP编译类:无法解析类型java.util.Map $ Entry。从所需的.class文件间接引用它3. 第6行的$_GET[’F’]没有定义啊?求问一下是什么意思?4. tp5.0|php8.0 在window系统上写定时任务,执行报错5. javascript - 一排三个框,各个框的间距是15px,距离外面的白框间距也是15px,这个css怎么写?6. javascript - 拿到美工/UI的PSD图,接下来写前端页面的顺序,求指导7. 用python3的smtplib库发邮件一直返回无法发送邮件提示,是什么原因?8. java - springboot 修改默认静态资源文件读取路径9. javascript - 怎么写一个函数,传一个字符串()进去可以实现各种日期形式的增减?并且考虑到当月是28,30,31天10. javascript - 怎样优化网页打开速度呢?

网公网安备