weixin_42351248 2009-12-05 13:20
浏览 254
已采纳

各位大虾 请教关于Swing的问题

请问如何让swing实现 像B/S里 ajax一样的功能啊?如果能有没有实现方案啊 最好有代码!
[b]问题补充:[/b]
网站进不去啊 有没有现成的例子 怎么和SWING 继承啊 能不能具体和我说说啊 谢谢
[b]问题补充:[/b]
谢谢 您的答案 但是具体如何实现啊 有没有例子啊? 后台线程如何监听啊 而且如何控制页面组建的显示啊 而且swing组建也不像B/S里 页面上用js直接就能控制的啊 ?

  • 写回答

4条回答 默认 最新

  • wocsok 2009-12-06 18:44
    关注

    你可以写个假的 类似动态查询的东西 就是第一查把结果放到list里 给你我以前用过的一个 动态查找的 jcombobox
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.util.List;
    import java.util.Vector;
    import javax.swing.ComboBoxModel;
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    import java.util.Collections;
    import java.util.Arrays;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.swing.JOptionPane;

    /**

    • @author动态 ComboBox
      */
      public class JAutoCompleteComboBox extends JComboBox {
      private AutoCompleter completer;

      public JAutoCompleteComboBox() {
      super();
      addCompleter();
      }

      public JAutoCompleteComboBox(ComboBoxModel cm) {
      super(cm);
      addCompleter();
      }

      public JAutoCompleteComboBox(Object[] items) {
      super(items);
      addCompleter();
      }

      public JAutoCompleteComboBox(List v) {
      super((Vector) v);
      addCompleter();
      }

      private void addCompleter() {
      setEditable(true);
      completer = new AutoCompleter(this);
      }

      public void autoComplete(String str) {
      this.completer.autoComplete(str, str.length());
      }

      public String getText() {
      return ((JTextField) getEditor().getEditorComponent()).getText();
      }

      public void setText(String text) {
      ((JTextField) getEditor().getEditorComponent()).setText(text);
      }

      public boolean containsItem(String itemString) {
      for (int i = 0; i < this.getModel().getSize(); i++) {
      String _item = "" + this.getModel().getElementAt(i);
      if (_item.equals(itemString)) {
      return true;
      }
      }
      return false;
      }

      /*

      • 测试方法 */ public static void main(String[] args) { JFrame frame = new JFrame(); Object[] items = new Object[] { "我", "我我我", "测试测试", "实验", "aab", "dfg", "aba", "hpp", "pp", "hlp" }; // 排序内容 // java.util.ArrayList list = new // java.util.ArrayList(Arrays.asList(items)); // Collections.sort(list); // JComboBox cmb = new JAutoCompleteComboBox(list.toArray()); Arrays.sort(items); JComboBox cmb = new JAutoCompleteComboBox(items); cmb.setSelectedIndex(-1); frame.getContentPane().add(cmb); frame.setSize(400, 80); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }

    /**

    • 自动完成器。自动找到最匹配的项目,并排在列表的最前面。
    • @author SamZheng */

    class AutoCompleter implements KeyListener, ItemListener {

    private JComboBox owner = null;
    private JTextField editor = null;
    
    private ComboBoxModel model = null;
    
    public AutoCompleter(JComboBox comboBox) {
        owner = comboBox;
        editor = (JTextField) comboBox.getEditor().getEditorComponent();
        editor.addKeyListener(this);
        model = comboBox.getModel();
        owner.addItemListener(this);
    }
    
    public void keyTyped(KeyEvent e) {
    }
    
    public void keyPressed(KeyEvent e) {
    }
    
    public void keyReleased(KeyEvent e) {
        char ch = e.getKeyChar();
        if (ch == KeyEvent.CHAR_UNDEFINED || Character.isISOControl(ch)
                || ch == KeyEvent.VK_DELETE) {
            return;
        }
    
        int caretPosition = editor.getCaretPosition();
        String str = editor.getText();
        if (str.length() == 0) {
            return;
        }
        autoComplete(str, caretPosition);
    }
    
    /**
     * 自动完成。根据输入的内容,在列表中找到相似的项目.
     */
    protected void autoComplete(String strf, int caretPosition) {
        Object[] opts;
        opts = getMatchingOptions(strf.substring(0, caretPosition));
        if (owner != null) {
            model = new DefaultComboBoxModel(opts);
            owner.setModel(model);
        }
        if (opts.length > 0) {
            String str = opts[0].toString();
            if (caretPosition > editor.getText().length())
                return;
            editor.setCaretPosition(caretPosition);
            editor.setText(editor.getText().trim().substring(0, caretPosition));
            if (owner != null) {
                try {
                    owner.showPopup();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    
    /**
     * 
     * 找到相似的项目, 并且将之排列到数组的最前面。
     * 
     * @param str
     * @return 返回所有项目的列表。
     */
    protected Object[] getMatchingOptions(String str) {
        List v = new Vector();
        List v1 = new Vector();
    
        for (int k = 0; k < model.getSize(); k++) {
            Object itemObj = model.getElementAt(k);
            if (itemObj != null) {
                String item = itemObj.toString().toLowerCase();
                if (item.startsWith(str.toLowerCase())) {
                    v.add(model.getElementAt(k));
                } else {
                    v1.add(model.getElementAt(k));
                }
            } else {
                v1.add(model.getElementAt(k));
            }
        }
        for (int i = 0; i < v1.size(); i++) {
            v.add(v1.get(i));
        }
        if (v.isEmpty()) {
            v.add(str);
        }
        return v.toArray();
    }
    
    public void itemStateChanged(ItemEvent event) {
        if (event.getStateChange() == ItemEvent.SELECTED) {
            int caretPosition = editor.getCaretPosition();
            if (caretPosition != -1) {
                try {
                    editor.moveCaretPosition(caretPosition);
                } catch (IllegalArgumentException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题