我想不出一种方法来使用它所在的事件侦听器的 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
成为类的私有成员(在任何类函数外部声明它(。
然后,它将可用于类方法(仅(。
您可以使用 protected
或 public
修饰符控制类外部容器输入的可见性:
-
protected
将使其对同一包中的子类和其他类可见。 -
public
将使它对每个类可见。