Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java实现自动完成——我做得对吗? 算法 开始 输入城市名称-部分或完整 如果用户点击enter,则从JTextField 开始暴力搜索 如果找到匹配项,则将它们放入向量中,然后放入JList中 如果未找到匹配项,请在向量中添加字符串“未找到匹配项” 向包含结果的用户显示JWindow 停止 代码: 封装测试; 导入javax.swing.*; 导入java.awt.Dimension; 导入java.awt.event.*; 导入java.util.Vector; 公共类自动完成测试扩展了JFrame{ JTextField城市=新的JTextField(10); 字符串enteredName=null; 字符串[]城市={“新泽西州”、“新罕布什尔州”, “苏塞克斯”、“埃塞克斯”、“伦敦”、“德里”、“纽约”}; JList list=新JList(); JScrollPane=新的JScrollPane(); ResultWindow r=新的ResultWindow(); //------------------------------------------------------------------------------ 公共静态void main(字符串[]args){ 新的自动完成测试(); } //------------------------------------------------------------------------------ 公共自动完成测试(){ setLayout(新java.awt.FlowLayout()); setVisible(真); 加(城市); //添加(窗格); 包装(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addKeyListener(新的TextHandler()); } //------------------------------------------------------------------------------ public void initiateSearch(字符串查找){ 向量匹配=新向量(); lookFor=lookFor.toLowerCase(); for(每个字符串:城市){ if(每个.contains(查找)){ 匹配项。添加(每个); System.out.println(“匹配:+每个); } } 这个。重新绘制(); 如果(匹配.size()!=0){ list.setListData(匹配项); r、 搜索结果=列表; r、 窗格=窗格; r、 初始化显示(); }否则{ 匹配项。添加(“未找到匹配项”); list.setListData(匹配项); r、 搜索结果=列表; r、 窗格=窗格; r、 初始化显示(); } } //------------------------------------------------------------------------------ 公共类ResultWindow扩展JWindow{ 公共JScrollPane; 公众查询结果; //------------------------------------------------------------------------------ 公众投票结果(){ } //------------------------------------------------------------------------------ public void initiateDisplay(){ 窗格。setViewportView(搜索结果); 添加(窗格); 包装(); this.setLocation(AutoCompleteTest.this.getX()+2, AutoCompleteTest.this.getY()+ AutoCompleteTest.this.getHeight()); //this.setPreferredSize(city.getPreferredSize()); 此.setVisible(true); } } //------------------------------------------------------------------------------ 类TextHandler实现KeyListener{ @凌驾 public void keyTyped(KeyEvent e){ } @凌驾 按下公共无效键(按键事件e){ if(r.isVisible()){ r、 setVisible(假); } 如果(例如getKeyChar()=='\n'){ initiateSearch(city.getText()); } } @凌驾 公共无效密钥已释放(密钥事件e){ } } //------------------------------------------------------------------------------ } 输出_Java_Swing_Autocomplete_Jframe_Jwindow - Fatal编程技术网

用Java实现自动完成——我做得对吗? 算法 开始 输入城市名称-部分或完整 如果用户点击enter,则从JTextField 开始暴力搜索 如果找到匹配项,则将它们放入向量中,然后放入JList中 如果未找到匹配项,请在向量中添加字符串“未找到匹配项” 向包含结果的用户显示JWindow 停止 代码: 封装测试; 导入javax.swing.*; 导入java.awt.Dimension; 导入java.awt.event.*; 导入java.util.Vector; 公共类自动完成测试扩展了JFrame{ JTextField城市=新的JTextField(10); 字符串enteredName=null; 字符串[]城市={“新泽西州”、“新罕布什尔州”, “苏塞克斯”、“埃塞克斯”、“伦敦”、“德里”、“纽约”}; JList list=新JList(); JScrollPane=新的JScrollPane(); ResultWindow r=新的ResultWindow(); //------------------------------------------------------------------------------ 公共静态void main(字符串[]args){ 新的自动完成测试(); } //------------------------------------------------------------------------------ 公共自动完成测试(){ setLayout(新java.awt.FlowLayout()); setVisible(真); 加(城市); //添加(窗格); 包装(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addKeyListener(新的TextHandler()); } //------------------------------------------------------------------------------ public void initiateSearch(字符串查找){ 向量匹配=新向量(); lookFor=lookFor.toLowerCase(); for(每个字符串:城市){ if(每个.contains(查找)){ 匹配项。添加(每个); System.out.println(“匹配:+每个); } } 这个。重新绘制(); 如果(匹配.size()!=0){ list.setListData(匹配项); r、 搜索结果=列表; r、 窗格=窗格; r、 初始化显示(); }否则{ 匹配项。添加(“未找到匹配项”); list.setListData(匹配项); r、 搜索结果=列表; r、 窗格=窗格; r、 初始化显示(); } } //------------------------------------------------------------------------------ 公共类ResultWindow扩展JWindow{ 公共JScrollPane; 公众查询结果; //------------------------------------------------------------------------------ 公众投票结果(){ } //------------------------------------------------------------------------------ public void initiateDisplay(){ 窗格。setViewportView(搜索结果); 添加(窗格); 包装(); this.setLocation(AutoCompleteTest.this.getX()+2, AutoCompleteTest.this.getY()+ AutoCompleteTest.this.getHeight()); //this.setPreferredSize(city.getPreferredSize()); 此.setVisible(true); } } //------------------------------------------------------------------------------ 类TextHandler实现KeyListener{ @凌驾 public void keyTyped(KeyEvent e){ } @凌驾 按下公共无效键(按键事件e){ if(r.isVisible()){ r、 setVisible(假); } 如果(例如getKeyChar()=='\n'){ initiateSearch(city.getText()); } } @凌驾 公共无效密钥已释放(密钥事件e){ } } //------------------------------------------------------------------------------ } 输出

用Java实现自动完成——我做得对吗? 算法 开始 输入城市名称-部分或完整 如果用户点击enter,则从JTextField 开始暴力搜索 如果找到匹配项,则将它们放入向量中,然后放入JList中 如果未找到匹配项,请在向量中添加字符串“未找到匹配项” 向包含结果的用户显示JWindow 停止 代码: 封装测试; 导入javax.swing.*; 导入java.awt.Dimension; 导入java.awt.event.*; 导入java.util.Vector; 公共类自动完成测试扩展了JFrame{ JTextField城市=新的JTextField(10); 字符串enteredName=null; 字符串[]城市={“新泽西州”、“新罕布什尔州”, “苏塞克斯”、“埃塞克斯”、“伦敦”、“德里”、“纽约”}; JList list=新JList(); JScrollPane=新的JScrollPane(); ResultWindow r=新的ResultWindow(); //------------------------------------------------------------------------------ 公共静态void main(字符串[]args){ 新的自动完成测试(); } //------------------------------------------------------------------------------ 公共自动完成测试(){ setLayout(新java.awt.FlowLayout()); setVisible(真); 加(城市); //添加(窗格); 包装(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addKeyListener(新的TextHandler()); } //------------------------------------------------------------------------------ public void initiateSearch(字符串查找){ 向量匹配=新向量(); lookFor=lookFor.toLowerCase(); for(每个字符串:城市){ if(每个.contains(查找)){ 匹配项。添加(每个); System.out.println(“匹配:+每个); } } 这个。重新绘制(); 如果(匹配.size()!=0){ list.setListData(匹配项); r、 搜索结果=列表; r、 窗格=窗格; r、 初始化显示(); }否则{ 匹配项。添加(“未找到匹配项”); list.setListData(匹配项); r、 搜索结果=列表; r、 窗格=窗格; r、 初始化显示(); } } //------------------------------------------------------------------------------ 公共类ResultWindow扩展JWindow{ 公共JScrollPane; 公众查询结果; //------------------------------------------------------------------------------ 公众投票结果(){ } //------------------------------------------------------------------------------ public void initiateDisplay(){ 窗格。setViewportView(搜索结果); 添加(窗格); 包装(); this.setLocation(AutoCompleteTest.this.getX()+2, AutoCompleteTest.this.getY()+ AutoCompleteTest.this.getHeight()); //this.setPreferredSize(city.getPreferredSize()); 此.setVisible(true); } } //------------------------------------------------------------------------------ 类TextHandler实现KeyListener{ @凌驾 public void keyTyped(KeyEvent e){ } @凌驾 按下公共无效键(按键事件e){ if(r.isVisible()){ r、 setVisible(假); } 如果(例如getKeyChar()=='\n'){ initiateSearch(city.getText()); } } @凌驾 公共无效密钥已释放(密钥事件e){ } } //------------------------------------------------------------------------------ } 输出,java,swing,autocomplete,jframe,jwindow,Java,Swing,Autocomplete,Jframe,Jwindow,问题 显示结果的JWindow的大小(在JScrollPane中是JList)会根据结果而变化-如果城市名称小,JWindow小,如果城市名称大,JWindow大 我试过了所有可能的组合。我尝试使用JWindow的setPreferredDimension()、JList和JScrollPane但问题不会解决。 我希望它能与装饰过的JFrame的大小相匹配,无论发生什么 JList或JComboBox未返回正确的PreferredSize,必须设置此值,与pack()一起用于JWindow(任何

问题 显示结果的
JWindow
的大小(在
JScrollPane
中是
JList
)会根据结果而变化-如果城市名称小,
JWindow
小,如果城市名称大,
JWindow

我试过了所有可能的组合。我尝试使用
JWindow
setPreferredDimension()
JList
JScrollPane
但问题不会解决。
我希望它能与装饰过的
JFrame
的大小相匹配,无论发生什么

  • JList
    JComboBox
    未返回正确的
    PreferredSize
    ,必须设置此值,与
    pack()
    一起用于
    JWindow
    (任何更改后必须打包),或与一起使用,然后返回值
    getPreferredScrollableViewportSize()
    用于
    JList
    中的
    JScrollPane

  • 不要使用,使用(可以从系统剪贴板插入字符)用于

  • 不要重新发明轮子,使用,您可以重定向/返回匹配结果到弹出窗口

编辑

总之,基本上我必须手动创建一个所有 需要支持的城市对吗??bx@小孩

  • 这个想法可能很简单,你可以说

  • 有一个

  • 不带
    JTableHeader

  • 添加到那里(请参见教程中的代码示例)

  • 然后每个步骤都完成:-),不需要其他任何操作(如果
    RowFilter
    未返回任何匹配项,则可以更改
    JTextField
    背景
    (确保测试
    !isVisible
    )中的弹出窗口,添加
    setVisible


每次启动搜索并使用它计算列表的宽度时,都需要使用
JFrame的宽度

只需如下更改initiateSearch()函数:

public void initiateSearch(String lookFor){

    //add the following two statements to set the width of the list.
    int newWidth = AutoCompleteTest.this.getSize().width;        
    list.setPreferredSize(new Dimension(newWidth, list.getPreferredSize().height));

        Vector<String> matches = new Vector<String>();
        lookFor = lookFor.toLowerCase();
        for(String each : cities){
            if(each.contains(lookFor)){
                matches.add(each);
                System.out.println("Match: " + each);
            }
        }
        this.repaint();

        if(matches.size()!=0){
            list.setListData(matches);
            r.searchResult = list;
            r.pane = pane;
            r.initiateDisplay();
        }else{
            matches.add("No Match Found");
            list.setListData(matches);
            r.searchResult = list;
            r.pane = pane;
            r.initiateDisplay();
        }

    }
public void initiateSearch(字符串查找){
//添加以下两条语句以设置列表的宽度。
int newWidth=AutoCompleteTest.this.getSize(
public void initiateSearch(String lookFor){

    //add the following two statements to set the width of the list.
    int newWidth = AutoCompleteTest.this.getSize().width;        
    list.setPreferredSize(new Dimension(newWidth, list.getPreferredSize().height));

        Vector<String> matches = new Vector<String>();
        lookFor = lookFor.toLowerCase();
        for(String each : cities){
            if(each.contains(lookFor)){
                matches.add(each);
                System.out.println("Match: " + each);
            }
        }
        this.repaint();

        if(matches.size()!=0){
            list.setListData(matches);
            r.searchResult = list;
            r.pane = pane;
            r.initiateDisplay();
        }else{
            matches.add("No Match Found");
            list.setListData(matches);
            r.searchResult = list;
            r.pane = pane;
            r.initiateDisplay();
        }

    }
public void initiateDisplay()
    {
        this.pane.setViewportView(this.searchResult);
        this.add(this.pane);
        this.pack();
        this.setLocation(AutoCompleteTest.this.getX() + 2, AutoCompleteTest.this.getY()
                + AutoCompleteTest.this.getHeight());

        int padding = 5;
        int height = this.searchResult.getModel().getSize()
                * AutoCompleteTest.this.city.getSize().height;
        int windowWidth = AutoCompleteTest.this.getSize().width;

        this.setSize(windowWidth, height);
        this.setVisible(true);
    }