要麼使JTextField
final
或使其在類中的實例字段。
final JTextField textField = ...
或
public class ... {
private JTextField textField;
public ...() { = new JTextField(...);
您可以爲其他變量來做到這一點。通常情況下,除非你有其他理由,否則我會建議使用實例字段。看看Understanding Class Members瞭解更多詳細信息...
您可以考慮像C中的「私有」變量這樣的實例字段,那些在C文件本身中聲明的實例字段,其中不能在文件的外部引用它們在
更新
首先,GUI的(對不起,很長一段時間,因爲我已經做了ç所以可能不完全正確)宣佈往往是事件驅動的,也就是說,它們不運行在線性/程序化的方式。你設置了一堆回調,並等待一些東西來觸發它們。當觸發回調,您採取適當的行動......
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
沒有立即叫,這意味着分配下的剩餘代碼會立即運行和前ActionListener
有任何被調用的機會。
認爲它像一個函數指針或回調。你可以把它傳遞給另一個函數,但你不知道什麼時候會被稱爲......
當的JComboBox
變化和觸發器和操作事件的狀態下,ActionListener
小號actionPeformed
方法被調用,此時您可以獲取當前值並將其應用到文本字段並將其分配給您的變量...或者您還需要做什麼......
請注意,我附加了ActionListener
和被調用comboBox.setSelectedItem(null)
,這將會實際上會導致ActionListener
被通知...棘手;)
澄清:在actionPerformed()方法內賦值給值不會產生錯誤。但是當我稍後嘗試將該值分配給偵聽器之外的另一個變量時,我收到了報告的錯誤。 – frododot 2014-10-10 04:16:22
謝謝MadProgrammer!問題解決了...! – frododot 2014-10-10 18:26:16