2013-07-29 29 views
1

我在另一個actionlistener內部有一個actionlistener,當我在外部工作區內創建我的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); 

     } 
    }); 
+1

Java的圖形用戶界面可能需要在多個平臺上工作,在不同的屏幕分辨率和使用不同的PLAFs。因此,它們不利於組件的準確放置。爲了組織強大的圖形用戶界面,請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[空格]的佈局填充和邊框(http: //stackoverflow.com/q/17874717/418556)。 –

回答

2

您應該使用revalidate代替repaint

你也應該依靠LayoutManager而不是使用setSizesetLocation