[英]How to get text from JComboBox?
我在從 JComboBox 的選定位置獲取文本時遇到問題。 我嘗試在擴展 Kodowanie.java 的類中使用 getSelectedItem 方法,但我得到空值,但我找不到原因。 方法 (getSelectedItem) 在 Kodowanie 類中有效,我可以輕松地從 JComboBox 獲取文本形式。
Kodowanie.java
public class Kodowanie {
//Skladowe:
ArrayList <String> qweqwe;
JComboBox inputCode = new JComboBox(); //HERE IS MY INPUT COMBOBOX
JComboBox outputCode = new JComboBox();
JTextArea input;
JTextArea output;
public void createGUI(){
JFrame frame = new JFrame("Code");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
input = new JTextArea();
output = new JTextArea();
qweqwe = new ArrayList<>();
napelnijTalbiceCharsetami(qweqwe); //METHOD WHICH ADD ALL CHARSETS TO LIST
inputCode = new JComboBox(qweqwe.toArray());
outputCode = new JComboBox(qweqwe.toArray());
JScrollPane scrollPaneInput = new JScrollPane(input, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
JScrollPane scrollPaneOutput = new JScrollPane(output, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPaneInput.setBorder(BorderFactory.createTitledBorder("Input Path"));
scrollPaneOutput.setBorder(BorderFactory.createTitledBorder("Output Path"));
inputCode.setPreferredSize(new Dimension(400,50));
outputCode.setPreferredSize(new Dimension(400,50));
scrollPaneInput.setPreferredSize(new Dimension(400, 100));
scrollPaneOutput.setPreferredSize(new Dimension(400, 100));
input.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt){
Strumieniowanie tmp;
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
{
try {
tmp = new Strumieniowanie(input.getText(), output.getText());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
frame.getContentPane().add(scrollPaneInput);
frame.getContentPane().add(scrollPaneOutput);
frame.getContentPane().add(inputCode);
frame.getContentPane().add(outputCode);
frame.setLayout(new FlowLayout());
frame.setPreferredSize(new Dimension(850, 220));
frame.setVisible(true);
frame.pack();
}
private ArrayList napelnijTalbiceCharsetami(ArrayList tmp){
Map charSets = Charset.availableCharsets();
Iterator iterator = charSets.keySet().iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toString());
tmp.add(iterator.next().toString());
}
return tmp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Kodowanie l = new Kodowanie();
l.createGUI();
}
}
Strumieniowanie.java
public class Strumieniowanie extends Kodowanie {
protected boolean pathInputOk = false;
protected boolean pathOutputOk = false;
public Strumieniowanie(String tmpInpute, String tmpOutput) throws IOException {
File plikInput = new File(tmpInpute);
File plikOutput = new File(tmpOutput);
String inputText;
inputText = (String) inputCode.getSelectedItem(); //HERE I TRY TO GET STRING FROM JCOMBOBOX BUT IT IS ALWAYS NULL !
System.out.println(inputText);
pathInputOk = plikInput.isFile();
pathOutputOk = plikOutput.isFile();
System.out.println(pathInputOk);
System.out.println(pathOutputOk);
if (pathInputOk && pathOutputOk) {
File nowyPlik = new File(tmpInpute);
FileInputStream fis = new FileInputStream(nowyPlik);
fis.close();
}
}
protected boolean isItaPath(File plik) {
boolean tmp =
false;
tmp = plik.isFile();
return tmp;
}
}
KeyListener
不是適當的事件偵聽器,它是在組合框更新其狀態之前觸發的,最好使用ActionListener
。
組合框更新后,將觸發actionPerformed
事件,這將確保getSelectedItem
方法實際上返回當前選定的值。
可以使用以下方法從ComboBox
獲取文本。
String s = (String)comboOne.getSelectedItem();
其中comboOne
是ComboBox
的變量名。
作為參考,請回答頁面的標題:如何從JComboBox
獲取文本?
((JTextComponent)combo.getEditor().getEditorComponent()).getText()
它“有效”,但不返回任何文本...廢話。
您可以使用KeyListener但不是直接添加它,而是使用插入它
comboBox.getEditor().getEditorComponent().addKeyListener();
這將確保將偵聽器添加到 JComboBox 的編輯器
要從中獲取文本,請使用:
comboBox.getEditor().getItem();
這將直接從編輯器中獲取文本,您可以在 keyReleased 下面使用它在您鍵入時從編輯器中獲取文本
combobox.getEditor().getItem().toString
為我工作。
您可以添加documentListener
來監聽輸入的變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.