请问如何让swing实现 像B/S里 ajax一样的功能啊?如果能有没有实现方案啊 最好有代码!
[b]问题补充:[/b]
网站进不去啊 有没有现成的例子 怎么和SWING 继承啊 能不能具体和我说说啊 谢谢
[b]问题补充:[/b]
谢谢 您的答案 但是具体如何实现啊 有没有例子啊? 后台线程如何监听啊 而且如何控制页面组建的显示啊 而且swing组建也不像B/S里 页面上用js直接就能控制的啊 ?
各位大虾 请教关于Swing的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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(); } } } }
}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 -
悬赏问题
- ¥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函数的问题