Java n帮助你

Java n帮助你,java,xml,swing,jcombobox,Java,Xml,Swing,Jcombobox,代码 import java.awt.*; 导入java.awt.event.*; 导入java.util.*; 导入javax.swing.*; 公共类ComboBoxTwo扩展JFrame实现ActionListener、ItemListener{ 私有静态最终长serialVersionUID=1L; 专用JComboBox主组合框; 专用JComboBox子omboBox; 私有哈希表子项=新哈希表(); 公营机构{ 字符串[]项={“选择项”、“颜色”、“形状”、“水果”}; main

代码

import java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.*;
公共类ComboBoxTwo扩展JFrame实现ActionListener、ItemListener{
私有静态最终长serialVersionUID=1L;
专用JComboBox主组合框;
专用JComboBox子omboBox;
私有哈希表子项=新哈希表();
公营机构{
字符串[]项={“选择项”、“颜色”、“形状”、“水果”};
mainComboBox=新的JComboBox(项目);
mainComboBox.addActionListener(这个);
mainComboBox.addItemListener(此);
//使用向上/向下箭头键时防止触发操作事件
//mainComboBox.putClientProperty(“JComboBox.isTableCellEditor”,Boolean.TRUE);
getContentPane().add(mainComboBox,BorderLayout.WEST);
subComboBox=new JComboBox();//创建具有多个模型的子组合框
subComboBox.setPrototypeDisplayValue(“xxxxxxxxx”);//JDK1.4
subComboBox.addItemListener(此);
getContentPane().add(subComboBox,BorderLayout.EAST);
字符串[]子项1={“选择颜色”、“红色”、“蓝色”、“绿色”};
子项目。投入(项目[1],子项目1);
字符串[]子项2={“选择形状”、“圆”、“正方形”、“三角形”};
子项目。投入(项目[2],子项目2);
String[]subItems3={“选择水果”、“苹果”、“橘子”、“香蕉”};
子项目。投入(项目[3],子项目3);
//主组合框。设置所选索引(1);
}
@凌驾
已执行的公共无效操作(操作事件e){
String item=(String)mainComboBox.getSelectedItem();
对象o=子项。获取(项);
如果(o==null){
setModel(新的DefaultComboxModel());
}否则{
setModel(新的DefaultComboxModel((字符串[])o));
}
}
@凌驾
公共无效itemStateChanged(ItemEvent e){
如果(如getStateChange()==ItemEvent.SELECTED){
如果(例如getSource()==mainComboBox){
如果(mainComboBox.getSelectedIndex()!=0){
FirstDialog FirstDialog=新建FirstDialog(ComboBoxTwo.this,
mainComboBox.getSelectedItem().toString(),“请稍候,正在搜索…”;
}
} 
}
}
私有类FirstDialog扩展JDialog{
私有静态最终长serialVersionUID=1L;
第一个对话框(最终帧父级、字符串winTitle、字符串msgString){
超级(家长,winTitle);
setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
JLabel myLabel=新的JLabel(msgString);
JButton bNext=新JButton(“停止进程”);
添加(myLabel,BorderLayout.CENTER);
添加(bNext,BorderLayout.SOUTH);
bNext.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件evt){
setVisible(假);
}
});
javax.swing.Timer t=newjavax.swing.Timer(1000,newActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
setVisible(假);
}
});
t、 设置重复(假);
t、 start();
setLocationRelativeTo(父级);
设置尺寸(新尺寸(400100));
setVisible(真);
}
}
公共静态void main(字符串[]args){
JFrame frame=new ComboBoxTwo();
frame.setDefaultCloseOperation(关闭时退出);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
}

我得到了一个类节点和一个类节点。节点表示一个节点,NodeImporter解析XML。在NodeImporter中,XML源被解析并表示为HashMap的HashMap。外部HashMap(Key,Value)是(Kind,(HashMap(Key,Value))。内部HashMap(Key,Value)是(UinqueID,Node)的最终结果(Kind,(UniqueID,Node))。我将最终结果称为“filteredMap”。除了构造函数和filteredMap的getter之外,NodeImporter的所有字段和方法都是私有的。 需要数据来构建组合框的类从NodeImporter的实例中获取filteredMap。然后,它可以获取外部HashMap的键来构建第一个组合框模型。它可以同样轻松地获取内部HashMap以用作第二个组合框的HashMap

设置的伪代码:

使用类成员生成的类NodeImporter:

arrayList(String) uniqueKinds = null  
arrayList(Node) allNodes  = null  
HashMap(String, HashMap(String,Node))) filteredNodes = null  
类NodeImporter构造函数:

open XML  
while xml source has next  
  {  
  add next node to allNodes, key = node.uniqueId, Val = node  
  if next node.kind not in uniqueKinds, add node.kind to uniqueKinds  
  }



ClassNodeImporter method makeFilteredeMap:  

    private boolean makeFilteredeMap() {
        if (uniqueKinds.isEmpty()) {
            return false;
        } else {
            for (String k : uniqueKinds) {
                HashMap<String, Node> aMap = new HashMap<String, Node>();
                for (Node n : allNodes) {
                    if (n.getKind().equals(k)) {
                        aMap.put(n.getCode(), n);
                    }
                }
                filteredNodes.put(k, aMap);
            }
            return true;
        }
    }
openxml
而xml源具有下一个
{  
将下一个节点添加到allNodes,key=node.uniqueId,Val=node
如果下一个node.kind不在uniqueKinds中,请将node.kind添加到uniqueKinds
}
ClassNodeImporter方法MakeFilteredMap:
私有布尔makeFilteredMap(){
if(uniqueKinds.isEmpty()){
返回false;
}否则{
用于(字符串k:唯一种类){
HashMap aMap=新的HashMap();
用于(节点n:所有节点){
如果(n.getKind()等于(k)){
aMap.put(n.getCode(),n);
}
}
filteredNodes.put(k,aMap);
}
返回true;
}
}

我最后得到了一个类NodeImporter和一个类节点。节点表示一个节点,NodeImporter解析XML。在NodeImporter中,XML源被解析并表示为一个HashMap的HashMap。外部HashMap(键,值)是(种类),(HashMap(键,值))。内部HashMap(键,值)是(UinqueID,节点),最终结果是(种类),(UniqueID,Node))。我将最终结果称为“filteredMap”。除了构造函数和filteredMap的getter之外,NodeImporter的所有字段和方法都是私有的。 需要数据来构建组合框的类从实例获取filteredMap
arrayList(String) uniqueKinds = null  
arrayList(Node) allNodes  = null  
HashMap(String, HashMap(String,Node))) filteredNodes = null  
open XML  
while xml source has next  
  {  
  add next node to allNodes, key = node.uniqueId, Val = node  
  if next node.kind not in uniqueKinds, add node.kind to uniqueKinds  
  }



ClassNodeImporter method makeFilteredeMap:  

    private boolean makeFilteredeMap() {
        if (uniqueKinds.isEmpty()) {
            return false;
        } else {
            for (String k : uniqueKinds) {
                HashMap<String, Node> aMap = new HashMap<String, Node>();
                for (Node n : allNodes) {
                    if (n.getKind().equals(k)) {
                        aMap.put(n.getCode(), n);
                    }
                }
                filteredNodes.put(k, aMap);
            }
            return true;
        }
    }