浏览器的地址栏一般带有输入网址的记忆功能,输入首字母,就会出现以它开头的所有曾使用记录。在swing中也能很容易的实现这个功能。
对于这个功能,可以分解成几个步骤:输入-->响应并弹出提示-->选择或继续输入。为防止重复的保存,直接用Set保存所有输入。显示提示的组件可以用JList外面套上1个JWindow.再加上鼠标响应和输入响应,基本就完成了。
用户的所有输入由addCompletion()方法加入到Set中去,这个动作可以由CompletableJTextField上触发Enter快捷键响应,或者由其他的自定义动作实现,取决于你的需求。用户无论输入或者删除一个字母,后台都会根据输入匹配Set中保存的数据,然后将所有匹配条目放到Jlist中由JWindow显示出来。
如果要看起来更好看,可以在JWindow上setBorder(xx),比如设置一个带阴影层次效果的setBorder(roundedShadowBorder);
如果要更精细一些,可考虑为JList添加上移、下移和回车事件响应,这样就跟浏览器的地址栏完全一样了。
public class CompletableJTextField extends JTextField implements
ListSelectionListener {
private static final long serialVersionUID = 1L;
JList completionList;
DefaultListModel completionListModel;
JScrollPane listScroller;
JWindow listWindow;
Set<String> completions;
public CompletableJTextField(int col) {
super(col);
getDocument().addDocumentListener(new Completer());
completionListModel = new DefaultListModel();
completionList = new JList(completionListModel);
completionList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
completionList.addListSelectionListener(this);
listScroller = new JScrollPane(completionList,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
listWindow = new JWindow();
listWindow.getContentPane().add(listScroller);
}
public void addCompletion(String s) {
completions.add(s);
}
public void removeCompletion(String s) {
completions.remove(s);
}
public void clearCompletions() {
completions.clear();
listWindow.setVisible(false);
}
public void valueChanged(ListSelectionEvent e) {
if (completionList.getModel().getSize() == 0) {
return;
}
listWindow.setVisible(false);
final String completionString = (String) completionList
.getSelectedValue();
SwingUtilities.invokeLater(new Runnable(){
public void run() {
if(null != completionString) {
setText(completionString);
}
}});
}
/**
* @return the completions
*/
public Set<String> getCompletions() {
return completions;
}
/**
* @param completions the completions to set
*/
public void setCompletions(Set<String> completions) {
this.completions = completions;
}
class Completer implements DocumentListener {
private Pattern pattern;
private void buildPopup() {
completionListModel.clear();
Iterator<String> it = completions.iterator();
pattern = Pattern.compile(getText() + ".+");
while (it.hasNext()) {
String completion = it.next();
Matcher matcher = pattern.matcher(completion);
if (matcher.matches()) {
completionListModel.add(completionListModel.getSize(),
completion);
}
}
}
private void showPopup() {
if (completionListModel.getSize() == 0) {
listWindow.setVisible(false);
return;
}
Point los = getLocationOnScreen();
int popX = los.x;
int popY = los.y + getHeight();
listWindow.setLocation(popX, popY);
listWindow.pack();
listWindow.setVisible(true);
}
private void buildAndShowPopup() {
if (getText().length() < 1)
return;
buildPopup();
showPopup();
}
public void insertUpdate(DocumentEvent e) {
buildAndShowPopup();
}
public void removeUpdate(DocumentEvent e) {
buildAndShowPopup();
}
public void changedUpdate(DocumentEvent e) {
buildAndShowPopup();
}
}
}
分享到:
相关推荐
6. **界面优化**:可能包括添加前进、后退按钮,刷新功能,以及地址栏等常见浏览器元素,提升用户体验。 这个项目的源码是一个很好的学习资源,可以帮助开发者了解如何在Java Swing应用中集成Web浏览功能。通过研究...
Swing库则被用来构建浏览器的用户界面,比如地址栏、前进/后退按钮、网页内容的展示区域等。 关于标签,“applet html_浏览器”指出了这个项目涉及到的两个关键概念:Java Applet和HTML浏览器。Applet是Java在Web...
《山寨版植物大战僵尸源码0_01beta版》是一个非常适合初学者研究的游戏开发项目,它基于Java编程语言,提供了完整的源代码,为想要学习Java游戏开发的程序员提供了宝贵的实践资源。Java作为一种广泛使用的面向对象...
1. **用户界面**:可能使用Java Swing或JavaFX库来创建GUI,包括地址栏、前进/后退按钮和网页显示区域。 2. **网络请求**:利用`java.net.URL`和`java.net.HttpURLConnection`类进行HTTP请求,获取网页内容。 3. **...
开发者会选择其中一个来构建浏览器的界面元素,如地址栏、菜单、按钮等。 3. **URL和URLConnection**:Java提供了`java.net.URL`和`java.net.URLConnection`类用于处理网络资源。通过这两个类,开发者可以建立到...
这些元素可以用JavaFX或Swing的组件如TextField(地址栏)、Button(按钮)和WebView(JavaFX中用于显示网页的组件)来实现。 地址栏的事件监听器会捕获用户的输入,当用户点击“Go”按钮时,浏览器将解析输入的URL...
这个浏览器能够接收用户在地址栏输入的正确URL,并加载显示对应的网页内容。我们将分析实现这一功能所需的关键技术和步骤。 【正文】: 1. **Java基础知识**: Java是一种面向对象的、跨平台的编程语言,以其“一...
XUL文件可以包含浏览器的地址栏、书签、后退/前进按钮等元素。 3. **JavaScript和CSS**:JavaScript文件可能用于处理用户交互逻辑,如地址栏的自动补全、页面导航等。CSS文件则负责定义界面的样式和布局。 4. **...
- `JTextField`: 用于输入URL,作为地址栏。 - `JLabel`: 显示页面标题和其他信息。 2. **HTTP协议与Socket编程**: 浏览器的核心功能之一是向服务器发送HTTP请求并接收响应。Java中的`java.net.Socket`类提供了低...
Java浏览器可能使用JavaFX来构建其图形用户界面(GUI),包括地址栏、前进/后退按钮、书签等元素。 2. **Swing**:虽然JavaFX是现代的GUI库,但老版本的Java浏览器可能使用了Swing组件来构建UI。Swing也是Java的...
然后,利用Eclipse的Swing库来构建用户界面,包括地址栏、前进/后退按钮、页面显示区域等元素。网络编程方法则涉及如何发送HTTP请求并接收响应,解析HTML内容并展示在浏览器窗口中。 总的来说,这个课程设计通过...
在这个项目中,可能有多个`JPanel`来分别管理地址栏、网页显示区域等。 2. **JButton与ActionListener**: - `JButton` 用于创建按钮,例如"前进"、"后退"、"刷新"等操作。每个按钮需要添加`ActionListener`来处理...
在开发基于Java的网页浏览器时,Swing可以用来构建浏览器的基本框架,如地址栏、前进/后退按钮、页面视图等。 2. **JavaFX**: JavaFX是另一个用于创建现代桌面应用的Java库,它提供了更丰富的视觉效果和更好的性能...
5. **DocumentListener**:为了实现实时的URL预览(如浏览器地址栏的自动补全功能),我们可以为地址栏的`JTextField`添加`DocumentListener`。当用户在地址栏输入时,监听器可以检查输入的内容,并根据历史记录或...
开发者可能选择其中一个来构建浏览器的界面部分,包括地址栏、前进/后退按钮、书签、选项卡等。 2. **网络编程**:Java的`java.net`包提供了处理HTTP、HTTPS协议的基础,这对于浏览器来说至关重要。必须理解和使用`...
6. **用户界面设计**: 使用Java Swing或JavaFX创建浏览器的界面,包括地址栏、前进/后退按钮、刷新按钮等。Swing组件如JButton、JTextField等将被用到。 7. **网页解析**: 虽然JEditorPane能处理基本的HTML,但复杂...
- **Swing或JavaFX**:Java提供了Swing和JavaFX两个图形用户界面库来创建浏览器的界面组件,如地址栏、前进/后退按钮、书签、页面加载进度条等。 - **事件处理**:实现用户交互,例如,当用户在地址栏输入URL时...
在我们的简易浏览器中,SWT用于构建浏览器的基本组件,如地址栏、浏览区域以及可能的菜单和按钮。 在浏览器的核心功能方面,它需要能够解析和渲染HTML内容。Java本身并不直接支持HTML解析,但可以借助第三方库如...
- 地址栏:输入URL,解析并加载页面。 - 历史记录:保存用户的浏览历史,方便回溯。 - 书签管理:保存用户喜欢的网页链接。 - 下载管理:处理文件下载,提供进度反馈。 - 设置:允许用户自定义浏览器的偏好设置,如...