我无法找到一种方法来使用它所在的事件监听器的数组(在本例中为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 []在外面可见或有解决方法。
事先感谢:)
答案 0 :(得分:0)
您希望它在外面可见,那么为什么不在外部而不是在侦听器内部定义它?
在那里定义它:
JPanel zusatzPanel = new JPanel();
答案 1 :(得分:0)
使containerinput
成为您班级的私人成员(在任何Class函数之外声明它)。
然后它将可用于类方法(仅)。
您可以使用protected
或public
修饰符控制容器输入的可见性:
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
内的任何地方。