Java - 事件侦听器之外的用户数组



我想不出一种方法来使用它所在的事件侦听器的 Array(在本例中为 containerinput[](。

在事件侦听器

中,我生成文本字段、输入字段等,在它之外,我想创建一个键侦听器,当选择最后一个输入字段并按 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数组,并在事件处理程序中初始化它们。

更新的代码示例

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内的任何地方访问。

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

在你已经有这个的地方定义它:

JPanel zusatzPanel = new JPanel();

containerinput 成为类的私有成员(在任何类函数外部声明它(。

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

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

  • protected 将使其对同一包中的子类和其他类可见。
  • public将使它对每个类可见。

相关内容

  • 没有找到相关文章

最新更新