2012-01-18 36 views
2

我有以下PROGRAMM的JComboBox检查一个从程序选择心不是

package utests; 

import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import java.util.ArrayList; 

import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

class Foo extends JFrame { 
    private JComboBox combo; 

    public static void main(String... args) { 
    Foo f = new Foo(); 
    f.showUI(); 
    } 

    public void showUI() { 
    this.setVisible(true); 
    JPanel pane = new JPanel(); 
    this.setContentPane(pane); 
    combo = new JComboBox(); 
    combo.addItemListener(new ItemListener() { 
     @Override 
     public void itemStateChanged(ItemEvent arg0) { 
     if (arg0.getStateChange() == ItemEvent.SELECTED) { 
      System.out.println("You selected " + combo.getSelectedItem()); 
     } 
     } 
    }); 
    refreshBox(); 

    pane.add(combo); 
    this.pack(); 
    } 

    public void refreshBox(){ 
    combo.removeAllItems(); 
ArrayList<String> list = new ArrayList<String>(); 
    list.add("godsf"); 
    list.add("södlkf"); 
    list.add("ldsjlkfdsj"); 

    for (String s : list) { 
     combo.addItem(s); 
    } 
    } 
} 

的PROGRAMM会立刻告诉你的字符串

You selected godsf 

如何检查,如果用户选中的东西,而不是该程序?

编辑:我改变了一下程序:问题是我需要刷新一些框。每当我刷新框中的数据时,ItemListener被击中,并且我得到错误的结果。 如何检查Action是否由用户完成,而不是由Programm本身完成?要添加一些布尔似乎并不十分类似Java的...

+3

什么你到底想干什么?你能否详细说明你的问题? – 2012-01-18 11:14:53

回答

1

更改方法refreshBox的代码下面的代码只打印选定的价值? 我只是更改代码:

combo.addItem(s); 

的代码:

combo.insertItemAt(s, 0); 
+0

哦,是的,这是有效的!谢谢! – reox 2012-01-18 13:03:03

-1
package utests; 

import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import java.util.ArrayList; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

class Foo extends JFrame 
{ 
    public static void main(String... args) 
    { 
     Foo f = new Foo(); 
     f.showUI(); 
    } 
    bool first = false; 
    public void showUI() 
    { 
     this.setVisible(true); 
     JPanel pane = new JPanel(); 
     this.setContentPane(pane); 
     final JComboBox combo = new JComboBox(); 
     combo.addItemListener(new ItemListener() 
     { 
      @Override 
      public void itemStateChanged(ItemEvent arg0) 
      { 
       if(first) 
       if(arg0.getStateChange() == ItemEvent.SELECTED) 
       { 
        System.out.println("You selected " + combo.getSelectedItem()); 

       } 
       //from now on we'll see the selections 
       first = true; 

      } 
     }); 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add("godsf"); 
     list.add("södlkf"); 
     list.add("ldsjlkfdsj"); 
     for(String s : list) 
     { 
      combo.addItem(s); 
     } 
     pane.add(combo); 
     this.pack(); 
    } 
} 
+0

没关系,但是如果我需要多次更改程序内部的数据(并且我确实如此:))?那么我需要始终设置布尔值new ...这是最好的解决方案吗? – reox 2012-01-18 11:37:40

+0

你必须以某种方式标记程序行为,所以这可能是一个解决方案。 – xyz 2012-01-18 11:40:03

+1

这是什么?对无意义的问题意味着更少的答案。 – 2012-01-18 11:41:41

0

我觉得有一种方法可以知道用户选择的选项,或者不写入的一行代码。 但是,如果你想知道用户是否选择了一个选项或者你的程序选择了它,那么我认为你将不得不为你编写自己的定制逻辑。

这里是只有当用户选择它时才会打印选定选项的代码。

package utests; 

import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import java.util.ArrayList; 

import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

class Foo extends JFrame { 
private JComboBox combo; 

public static void main(String... args) { 
Foo f = new Foo(); 
f.showUI(); 
} 

public void showUI() { 
this.setVisible(true); 
JPanel pane = new JPanel(); 
this.setContentPane(pane); 
combo = new JComboBox(); 
refreshBox(); 

pane.add(combo); 
combo.addItemListener(new ItemListener() { 
    @Override 
    public void itemStateChanged(ItemEvent arg0) { 
    if (arg0.getStateChange() == ItemEvent.SELECTED) { 
     System.out.println("You selected " + combo.getSelectedItem()); 
    } 
    } 
}); 
this.pack(); 
} 

public void refreshBox(){ 
combo.removeAllItems(); 
ArrayList<String> list = new ArrayList<String>(); 
list.add("godsf"); 
list.add("södlkf"); 
list.add("ldsjlkfdsj"); 

for (String s : list) { 
    combo.addItem(s); 
} 
} 
} 

在这里,我们已经添加了ItemListener添加到组合框时,它已经显示出用户。

public void refreshBox() 
{ 
    combo.removeAllItems(); 
    ArrayList<String> list = new ArrayList<String>(); 
    list.add("godsf"); 
    list.add("södlkf"); 
    list.add("ldsjlkfdsj"); 

    for (String s : list) 
    { 
     combo.insertItemAt(s, 0); 
    } 
} 

它满足您的要求:所以它会在用户选择它

+0

同样的问题在这里:如果我需要经常刷新它呢?那么我必须一直删除Listener并重新添加它... – reox 2012-01-18 12:07:44

+0

@reox为什么要频繁刷新它?你在监视一些数据并将其添加到你的组合框? – 2012-01-18 12:14:25

+0

我提到,如果你想这样做,那么你将不得不编写你的定制逻辑... – 2012-01-18 12:26:22