Java 需要有关JComboBox上itemStateChanged的帮助吗
我有三个JComboBox,一个用于大陆,一个用于国家,另一个用于城市。所有数据都是从数据库加载的 第一个JComboBox拥有所有大陆。当我选择其中一个时,第二个JComboBox将加载相应的国家。直到现在,它仍然有效,因为我添加了一个“itemStateChanged” 但是,当我选择一个国家时,会再次调用事件“itemStateChanged”。 是什么使我的第二个组合框与第一个选中的项目保持一致,或者(如果我执行“RemoveAllItems”)复制其内容 它无法为每个JComboBox创建“itemStateChanged”?是.NET类型的,其中可以为每个组合框创建“SelectedIndexChanged” 我的代码的某些部分:Java 需要有关JComboBox上itemStateChanged的帮助吗,java,swing,jcombobox,Java,Swing,Jcombobox,我有三个JComboBox,一个用于大陆,一个用于国家,另一个用于城市。所有数据都是从数据库加载的 第一个JComboBox拥有所有大陆。当我选择其中一个时,第二个JComboBox将加载相应的国家。直到现在,它仍然有效,因为我添加了一个“itemStateChanged” 但是,当我选择一个国家时,会再次调用事件“itemStateChanged”。 是什么使我的第二个组合框与第一个选中的项目保持一致,或者(如果我执行“RemoveAllItems”)复制其内容 它无法为每个JComboBox
public class MainFrame extends JFrame implements ItemListener
{
…
private String iddistrito="VAZIO!!!";
private String idmunicipio="VAZIO!!!";
private boolean limpa=false;
private boolean populardistritos=false;
private boolean popularmunicipios=false;
private JComboBox cbFreguesiacliente = new JComboBox();
private JComboBox cbmunicipiocliente = new JComboBox();
private JComboBox cbdistritocliente = new JComboBox();
…
private void jbInit() throws Exception {
…
cbmunicipiocliente.addItemListener(this);
cbdistritocliente.addItemListener(this);
…
}
这部分代码是我单击按钮以启用组件时的内容:
private void btnNovocliente_actionPerformed(ActionEvent e) {
populardistritos = true;
cbdistritocliente.removeAllItems();
preenchecbdistritos();
populardistritos = false;
}
这段代码填充了第一个JComboBox的内容:
private void preenchecbdistritos(){
query = "select Distrito from distritos;";
try{
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL);
statement = connection.createStatement();
ResultSet resultset = statement.executeQuery(query);
StringBuffer results = new StringBuffer();
ResultSetMetaData metaData = resultset.getMetaData();
int numberOfColumns = metaData.getColumnCount();
cbdistritocliente.addItem("");
while (resultset.next()) {
for (int i =1; i<= numberOfColumns; i++) {
if (metaData.getColumnName(i).equals("Distrito")) {
cbdistritocliente.addItem(resultset.getObject(i).toString());
}
}
}
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(this,"rebentou no 1º catch " + e.toString(),"Inane error", JOptionPane.ERROR_MESSAGE);
} catch (SQLException e) {
JOptionPane.showMessageDialog(this,"rebentou no 2º catch " + e.toString(),"Inane error", JOptionPane.ERROR_MESSAGE);
}
}
public void itemStateChanged(ItemEvent e) {
if (populardistritos == false) {
if (limpa == false) {
if ((!cbdistritocliente.getSelectedItem().toString().equals("")) && (idmunicipio.equals("VAZIO!!!")))
{
query = "select id_distrito from distritos where distrito = '" + cbdistritocliente.getSelectedItem().toString() + "';";
try{
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL);
statement = connection.createStatement();
ResultSet resultset = statement.executeQuery(query);
StringBuffer results = new StringBuffer();
ResultSetMetaData metaData = resultset.getMetaData();
int numberOfColumns = metaData.getColumnCount();
while (resultset.next()) {
for (int i =1; i<= numberOfColumns; i++) {
if (metaData.getColumnName(i).equals("id_distrito")) {
iddistrito = resultset.getObject(i).toString();
}
}
}
preenchecbmunicipios();
} catch (ClassNotFoundException e2) {
} catch (SQLException e2) {
}
}
}
if (!cbmunicipiocliente.getSelectedItem().toString().equals(""))
{
query = "select id_municipio from municipios where municipio = '" + cbmunicipiocliente.getSelectedItem().toString() + "';";
try{
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL);
statement = connection.createStatement();
ResultSet resultset = statement.executeQuery(query);
StringBuffer results = new StringBuffer();
ResultSetMetaData metaData = resultset.getMetaData();
int numberOfColumns = metaData.getColumnCount();
while (resultset.next()) {
for (int i =1; i<= numberOfColumns; i++) {
if (metaData.getColumnName(i).equals("id_municipio")) {
idmunicipio = resultset.getObject(i).toString();
}
}
}
} catch (ClassNotFoundException e2) {
} catch (SQLException e2) {
}
}
}
}
private void preenchecbmunicipios(){
if (!iddistrito.equals("VAZIO!!!")) {
query = "select municipio from municipios where municipios.id_distrito = " + iddistrito + ";";
populardistritos=true;
//cbmunicipiocliente.removeAllItems();
try{
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL);
statement = connection.createStatement();
ResultSet resultset = statement.executeQuery(query);
StringBuffer results = new StringBuffer();
ResultSetMetaData metaData = resultset.getMetaData();
int numberOfColumns = metaData.getColumnCount();
cbmunicipiocliente.addItem("");
while (resultset.next()) {
for (int i =1; i<= numberOfColumns; i++) {
if (metaData.getColumnName(i).equals("municipio")) {
cbmunicipiocliente.addItem(resultset.getObject(i).toString());
}
}
}
populardistritos=false;
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(this,"rebentou no 1º catch do cbmunicipio com " + e.toString(),"Inane error", JOptionPane.ERROR_MESSAGE);
} catch (SQLException e) {
JOptionPane.showMessageDialog(this,"rebentou no 2º catch do cbmunicipio com " + e.toString(),"Inane error", JOptionPane.ERROR_MESSAGE);
}
}
}
private void preensecbdistritos(){
query=“从distritos中选择Distrito;”;
试一试{
类forName(JDBC_驱动程序);
connection=DriverManager.getConnection(数据库URL);
statement=connection.createStatement();
ResultSet ResultSet=statement.executeQuery(查询);
StringBuffer结果=新建StringBuffer();
ResultSetMetaData元数据=resultset.getMetaData();
int numberOfColumns=metaData.getColumnCount();
CBDistritoClient.addItem(“”);
while(resultset.next()){
对于(inti=1;i告诉您事件包含关于发起人的信息。所以只需检查e.getItemSelectable().equals(firstSelectBox)等
希望对您有所帮助。告诉您事件包含关于发起人的信息。所以只需检查e.getItemSelectable().equals(firstSelectBox)等
希望能有所帮助。您可能能够利用所示的方法,即第一个组合中的选择替换第二个组合中的模型。在该示例中,combo1
将包含大陆,而combo2
模型将设置为包含选定大陆上的国家的模式。该示例使用数组,但列表
可能是一个更灵活的选择。您可以利用所示的方法,其中第一个组合中的选择将替换第二个组合中的模型。在该示例中,combo1
将包含大陆,而combo2
模型将设置为包含选定大陆上的国家的模式nt。该示例使用数组,但列表
可能是一个更灵活的选择。请发布一些代码来演示您的问题。No code=无法帮助。请按问题下方的编辑链接并添加代码。就是这样……很抱歉,代码的某些部分是葡萄牙语的!:swile您不只是创建一个单独的<代码>项目监听器
对于每个组合框,可能在单独的内部类中?…阅读api文档也可能有帮助;-)提示:当将选择从一个项目更改为另一个项目时,Designer会触发两个事件。请发布一些代码来演示您的问题。No code=无法帮助。按问题下方的编辑链接并添加代码。就这样…很抱歉,代码的某些部分是葡萄牙语的!:swile您不只是单独创建<代码> iTeListNeal[/COD]对于每个组合框,可能在不同的内部类中……读取API DOC也可能有帮助;-提示:当将选择从一个项目更改为另一个项目时,两个事件被触发,同时也考虑“代码> MAP< /代码>。还考虑<代码> MAP< /COD>。