事件侦听器之外的Java-用户阵列

时间:2017-03-24 08:23:54

标签: java arrays event-handling

我无法找到一种方法来使用它所在的事件监听器的数组(在本例中为containerinput [])。

在事件监听器中我生成文本字段,输入字段等,并且在它之外我想制作一个keylistener,当选择最后一个输入字段时我按Tab键我想要发生一些事情。

除了我不能调用数组因为它不在范围之外我无法想办法改变它:(这是数组所在的事件:

JPanel zusatzPanel = new JPanel();
zusatzPanel.setBounds(11, 291, 270, 113);
contentPane2.add(zusatzPanel);
zusatzPanel.setLayout(null);

int[] ZusatzpanelCase = new int [300];
ZusatzpanelCase[1] = 0;

comboBox_projekt.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
        zusatzPanel.removeAll();    
        for(int key = 0; key < ObjektlängeForActionListener; key++){
            if(comboBox_projekt.getSelectedItem() == null){
                zusatzPanel.removeAll();    
                zusatzPanel.revalidate();
                zusatzPanel.repaint();
                break;
            }else{
                if(comboBox_projekt.getSelectedItem().equals(Projektname0JSON[key])){
                    zusatzPanel.removeAll();    
                    zusatzPanel.revalidate();
                    zusatzPanel.repaint();

                    String ZusatzString;
                    try {
                        ZusatzString = SimplePingPong.httpRequestZusatz(ProjektPK0JSON[key],"unused","zusatz");
                        if(ZusatzString.equals("Keine Werte")){
                            ZusatzpanelCase[1] = 0;

                        }else{  
                            JSONObject jsonObjectZusatz = new JSONObject(ZusatzString); 
                            int ZusatzJSONlength = jsonObjectZusatz.length();
                            int xValue = 0;
                            JTextField[] containerinput = new JTextField[ZusatzJSONlength];
                            JComboBox[] containerselect = new JComboBox[ZusatzJSONlength];
                            JLabel[] containerlabel = new JLabel[ZusatzJSONlength];

                            for(int key1 = 0; key1 < ZusatzJSONlength; key1++){
                                JSONObject jsonObjectZusatzObjekt0 = jsonObjectZusatz.getJSONObject(String.valueOf(key1));  
                                String ZusatzNameJSON = jsonObjectZusatzObjekt0.getString("name");  // String auslesen!!!
                                String ZusatzTypJSON = jsonObjectZusatzObjekt0.getString("typ");  // String auslesen!!!
                                String ZusatzEintragJSON = jsonObjectZusatzObjekt0.getString("eintrag");  // String auslesen!!!

;


                                                    if(ZusatzTypJSON.equals("input")){
                                    containerinput[key1] = new JTextField();
                                    containerinput[key1].setBounds(108, xValue, 136, 20);
                                    zusatzPanel.add(containerinput[key1]);
                                    containerinput[key1].setColumns(10);
                                }
                                if(ZusatzTypJSON.equals("select")){
                                    containerselect[key1] = new JComboBox();
                                    containerselect[key1].setBounds(108, xValue, 136, 20);
                                    zusatzPanel.add(containerselect[key1]);
                                }
                                containerlabel[key1] = new JLabel(ZusatzNameJSON);
                                containerlabel[key1].setFont(new Font("Tahoma", Font.PLAIN, 15));
                                containerlabel[key1].setBounds(1, xValue + 1, 100, 15);
                                zusatzPanel.add(containerlabel[key1]);

                                ZusatzpanelCase[1] = 1;
                                ZusatzpanelCase[2] = ZusatzpanelCase[2] + 1;

                                xValue = xValue + 30;
                                zusatzPanel.revalidate();
                                zusatzPanel.repaint();
                            } 




                        }
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } 



                }

            }
        }


    }
 });

在这里我想做一个关键的听众:

containerinput[ZusatzpanelCase[2]].setFocusTraversalKeysEnabled(false); 
containerinput[ZusatzpanelCase[2]].addKeyListener(new KeyAdapter() {

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_TAB){
                String dauervar = input_dauer.getText ();  //auslesen von benutzername
                String beschreibungvar = textArea_beschreibung.getText ();  //auslesen von benutzername
                String projektvar = (String)comboBox_projekt.getSelectedItem();
                String aktivitvar = (String)comboBox_aktivitaet.getSelectedItem();

                String datumvar = input_datum.getText ();  
                SimpleDateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
                Date date = null;
                try {
                    date = df1.parse(datumvar);
                } catch (ParseException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                long epoch = date.getTime();
                String numberAsStringUnixTImestamp = String.valueOf(epoch / 1000);

                String [ ] datenarray = {"a","b","c","d","e","f"};  

                datenarray[0] = numberAsStringUnixTImestamp;
                datenarray[1] = dauervar;   
                datenarray[2] = beschreibungvar;    
                datenarray[3] = projektvar; 
                datenarray[4] = aktivitvar; 
                datenarray[5] = usernamevar;    

                String JsonArray = "{ \"" + "datum" + "\":\"" + datenarray[0] + "\", \"" + "dauer" + "\":\"" + datenarray[1] + "\", \"" + "beschreibung" + "\":\"" + datenarray[2] + "\", \"" + "projektname" + "\":\"" + datenarray[3] + "\", \"" + "kategorie" + "\":\"" + datenarray[4] + "\", \"" + "username" + "\":\"" + datenarray[5] + "\" }";
                System.out.println(JsonArray);

                input_datum.setText(reportDate);
                if(check_datum.isSelected()){
                    CustomDateFinal[0] = datumvar;
                    input_datum.setText(CustomDateFinal[0]);

                }                               
                input_dauer.setText(USERDefTimeJSON);
                textArea_beschreibung.setText("");
                comboBox_projekt.requestFocus();


                try {
                    SimplePingPong.httpRequestVoid(JsonArray,"unused","werte");
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

        }

    }
});     

如何让我的containerinput []在外面可见或有解决方法。

事先感谢:)

3 个答案:

答案 0 :(得分:0)

您希望它在外面可见,那么为什么不在外部而不是在侦听器内部定义它?

在那里定义它:

JPanel zusatzPanel = new JPanel();

答案 1 :(得分:0)

使containerinput成为您班级的私人成员(在任何Class函数之外声明它)。

然后它将可用于类方法(仅)。

您可以使用protectedpublic修饰符控制容器输入的可见性:

  • protected将使子类和同一包中的其他类可见。
  • public会让每个班级都能看到它。

答案 2 :(得分:0)

您需要在事件处理程序之外声明您的containerinput数组,例如在类级别上并在事件处理程序中初始化它们。

您更新的代码示例

JPanel zusatzPanel = new JPanel();
zusatzPanel.setBounds(11, 291, 270, 113);
contentPane2.add(zusatzPanel);
zusatzPanel.setLayout(null);

JTextField[] containerinput; //like that
JComboBox[] containerselect; //like that
JLabel[] containerlabel;     //like that

int[] ZusatzpanelCase = new int [300];
ZusatzpanelCase[1] = 0;

comboBox_projekt.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
        zusatzPanel.removeAll();    
        for(int key = 0; key < ObjektlängeForActionListener; key++){
            if(comboBox_projekt.getSelectedItem() == null){
                zusatzPanel.removeAll();    
                zusatzPanel.revalidate();
                zusatzPanel.repaint();
                break;
            }else{
                if(comboBox_projekt.getSelectedItem().equals(Projektname0JSON[key])){
                    zusatzPanel.removeAll();    
                    zusatzPanel.revalidate();
                    zusatzPanel.repaint();

                    String ZusatzString;
                    try {
                        ZusatzString = SimplePingPong.httpRequestZusatz(ProjektPK0JSON[key],"unused","zusatz");
                        if(ZusatzString.equals("Keine Werte")){
                            ZusatzpanelCase[1] = 0;

                        }else{  
                            JSONObject jsonObjectZusatz = new JSONObject(ZusatzString); 
                            int ZusatzJSONlength = jsonObjectZusatz.length();
                            int xValue = 0;
                            containerinput = new JTextField[ZusatzJSONlength];
                            containerselect = new JComboBox[ZusatzJSONlength];
                            containerlabel = new JLabel[ZusatzJSONlength];

                            for(int key1 = 0; key1 < ZusatzJSONlength; key1++){
                                JSONObject jsonObjectZusatzObjekt0 = jsonObjectZusatz.getJSONObject(String.valueOf(key1));  
                                String ZusatzNameJSON = jsonObjectZusatzObjekt0.getString("name");  // String auslesen!!!
                                String ZusatzTypJSON = jsonObjectZusatzObjekt0.getString("typ");  // String auslesen!!!
                                String ZusatzEintragJSON = jsonObjectZusatzObjekt0.getString("eintrag");  // String auslesen!!!

;


                                                    if(ZusatzTypJSON.equals("input")){
                                    containerinput[key1] = new JTextField();
                                    containerinput[key1].setBounds(108, xValue, 136, 20);
                                    zusatzPanel.add(containerinput[key1]);
                                    containerinput[key1].setColumns(10);
                                }
                                if(ZusatzTypJSON.equals("select")){
                                    containerselect[key1] = new JComboBox();
                                    containerselect[key1].setBounds(108, xValue, 136, 20);
                                    zusatzPanel.add(containerselect[key1]);
                                }
                                containerlabel[key1] = new JLabel(ZusatzNameJSON);
                                containerlabel[key1].setFont(new Font("Tahoma", Font.PLAIN, 15));
                                containerlabel[key1].setBounds(1, xValue + 1, 100, 15);
                                zusatzPanel.add(containerlabel[key1]);

                                ZusatzpanelCase[1] = 1;
                                ZusatzpanelCase[2] = ZusatzpanelCase[2] + 1;

                                xValue = xValue + 30;
                                zusatzPanel.revalidate();
                                zusatzPanel.repaint();
                            } 




                        }
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } 



                }

            }
        }


    }
 });

现在您可以访问class内的任何地方。