중 하나 JTextField
final
를 만들거나 클래스 내의 인스턴스 필드하게 :-) 감사합니다. 당신은 당신 다른 변수에 대해이 작업을 수행 할 수
final JTextField textField = ...
또는
public class ... {
private JTextField textField;
public ...() { = new JTextField(...);
. 일반적으로 다른 이유가없는 한 인스턴스 필드를 사용하는 것이 좋습니다. 좀 더 자세한 내용은
Understanding Class Members 좀 봐 ...
인스턴스 필드는 C에서 "개인"변수와 같다고 생각할 수 있습니다. C 파일 자체 내에서 선언 된 인스턴스 변수는 외부 파일에서 참조 할 수 없습니다
은 GUI의, 첫째
업데이트 (나는 그래서 완전히 정확하지 않을 수 있습니다 C를 한 적이 있기 때문에 죄송 아주 긴 시간)에 이벤트 기반의 경향 선언, 즉, 그들은에서 작동하지 않습니다 선형/절차 적 방식. 당신은 일련의 콜백을 설정하고 그들을 콜 될 무언가를 기다립니다. 콜백이 발생하면, 당신은 할당 아래 나머지 코드를 즉시 실행할 것을 의미하고 ActionListener
을하기 전에, 예에서
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JTextField textField;
private JComboBox comboBox;
private String theValue;
public TestPane() {
textField = new JTextField(10);
comboBox = new JComboBox(new String[]{"Banana", "Apple", "Grapes", "Strawberries"});
comboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
theValue = (String)comboBox.getSelectedItem();
textField.setText(theValue);
}
});
comboBox.setSelectedItem(null);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(textField, gbc);
add(comboBox, gbc);
}
}
}
에서,
JComboBox
에 할당 된
ActionListener
즉시 호출되지 않습니다 ... 적절한 조치를 취할 부름을받을 기회가있다.
함수 포인터 또는 콜백처럼 생각하십시오. ... 당신은 다른 함수에 전달할 수 있지만, 당신은 그것을 호출 할 수있는 경우에 모르는
JComboBox
변경 및 트리거와 액션 이벤트의 상태는
ActionListener
의
actionPeformed
메소드가 호출
, 한 번에 현재 값을 가져 와서 텍스트 필드에 적용하여 변수에 할당 할 수 있습니다. 아니면 무엇을해야합니까?
ActionListener
및 첨부 된 을 첨부 했으므로 실제로 ActionListener
에 알림이 전송됩니다 ...까다로운;)
설명을 위해 : actionPerformed() 메서드 내에서 theValue에 대한 지정을해도 오류가 발생하지 않습니다. 그러나 나중에 나중에 theValue를 리스너 외부의 다른 변수에 할당하려고하면보고 된 오류가 발생합니다. – frododot
감사합니다 MadProgrammer! 문제 해결됨...! – frododot