Java JSpinner没有';我不能在行动中工作

Java JSpinner没有';我不能在行动中工作,java,swing,awt,actionlistener,jspinner,Java,Swing,Awt,Actionlistener,Jspinner,我在另一个actionlistener中有一个actionlistener,当我在外部的jspinner中创建我的jspinner时,它工作,但在内部的jspinner中不工作。这是我的代码。会有什么问题 这是不起作用的代码,如果我将sp和js放在内部动作侦听器之外,它就会起作用 menuItem = new JMenuItem("Insert Exams", KeyEvent.VK_E); menuItem.addActionListener(new ActionListene

我在另一个actionlistener中有一个actionlistener,当我在外部的jspinner中创建我的jspinner时,它工作,但在内部的jspinner中不工作。这是我的代码。会有什么问题

这是不起作用的代码,如果我将sp和js放在内部动作侦听器之外,它就会起作用

    menuItem = new JMenuItem("Insert Exams", KeyEvent.VK_E);
    menuItem.addActionListener(new ActionListener() {


        @Override
        public void actionPerformed(ActionEvent arg0) {
            count = 0;
            jt = new ArrayList[3];
            for (int i = 0; i < 3; i++)
                jt[i] = new ArrayList<JTextField>();
            panel = new JPanel();
            panel.setLocation(0, 0);
            panel.setSize(d.width, d.height);
            panel.setLayout(null);

            JButton add = new JButton("add Exam");
            add.setSize(120, 80);
            add.setLocation(250, 100);


            add.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    sp = new SpinnerNumberModel(1, 1, 5, 1);
                    js = new JSpinner(sp);
                    js.setSize(100, 30);
                    js.setLocation(450, 80 + count * 50);
                    panel.add(js);

                    for (int i = 1; i < 3; i++) {
                        JTextField jt1 = new JTextField(20);
                        jt1.setSize(150, 30);
                        jt1.setLocation(450 + i * 200, 80 + count * 50);

                        jt[i].add(jt1);
                        panel.add(jt1);
                    }
                    count++;
                    repaint();
                }
            });
            panel.add(add);

            setContentPane(panel);

        }
    });
menuItem=newjmenuItem(“插入检查”,KeyEvent.VK_E);
menuItem.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
计数=0;
jt=新阵列列表[3];
对于(int i=0;i<3;i++)
jt[i]=新的ArrayList();
panel=新的JPanel();
面板设置位置(0,0);
面板设置尺寸(d.宽度,d.高度);
panel.setLayout(空);
JButton add=新JButton(“添加检查”);
添加.设置大小(120,80);
添加设置位置(250100);
add.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
sp=新喷丝头型号(1,1,5,1);
js=新的JSpinner(sp);
js.setSize(100,30);
js.setLocation(450,80+计数*50);
panel.add(js);
对于(int i=1;i<3;i++){
JTextField jt1=新的JTextField(20);
jt1.设置尺寸(150,30);
jt1.设置位置(450+i*200,80+计数*50);
jt[i].新增(jt1);
面板。添加(jt1);
}
计数++;
重新油漆();
}
});
面板。添加(添加);
设置内容窗格(面板);
}
});

您应该使用
重新验证
而不是
重新绘制


您还应该依赖于
LayoutManager
,而不是使用
setSize
setLocation

Java GUI可能必须在多个平台、不同的屏幕分辨率和不同的PLAF上工作。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请改为使用布局管理器,或者与布局填充和边框一起使用。