⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jtextlist.java

📁 一个简易的java画图软件
💻 JAVA
字号:
package app.pane;

import java.awt.Rectangle;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.text.Position;

/**
 * JTextList是一个另一种风格的列表框, 上面是文本,下面是列表, 当单击列表选择项目是,会在上面文本框中 显示出来,如果在上面文本框中输入数据,
 * 会在下面列表中自动滚动。
 * <p>
 * 注:功能最简化
 * 
 * @author 黄兴海
 * 
 */
public class JTextList extends JComponent {
	private JTextField textField;
	private JList list;
	private JScrollPane scrollPane;

	final private Rectangle TEXTFIELD_DEFAULT_RECT = new Rectangle(0, 0, 100,
			23);
	final private Rectangle SCROLLPANE_DEFAULT_RECT = new Rectangle(0, 22, 100,
			110);

	JTextList() {
		textField = new JTextField();
		textField.setBounds(TEXTFIELD_DEFAULT_RECT);
		textField.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(final KeyEvent e) {
				int size = list.getModel().getSize();
				if (size == 0)
					return;// 列表中没有任何元素
				String str = textField.getText();
				int index = list.getNextMatch(str, 0, Position.Bias.Forward);
				if (index >= 0) {
					// 将所选的项目显示出来
					list.ensureIndexIsVisible(size - 1);
					list.ensureIndexIsVisible(index);

					// 当完全匹配时,修正textField的值
					if (str.equalsIgnoreCase((String) (list.getModel()
							.getElementAt(index)))) {
						textField.setText((String) (list.getModel()
								.getElementAt(index)));
						list.setSelectedIndex(index);
					} else {
						list.clearSelection();
					}
				} else {
					list.ensureIndexIsVisible(0);
					list.clearSelection();
				}
			}
		});

		textField.setAutoscrolls(false);

		list = new JList();

		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(final MouseEvent e) {
				if (list.getSelectedValues().length > 0)
					textField.setText(list.getSelectedValue().toString());
			}
		});

		JViewport jv = new JViewport();
		jv.add(list);

		scrollPane = new JScrollPane();
		scrollPane
				.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setBounds(SCROLLPANE_DEFAULT_RECT);
		scrollPane.setViewportView(list);

		add(textField);
		add(scrollPane);
	}

	public JTextField getTextField() {
		return textField;
	}

	public JList getList() {
		return list;
	}

	public JScrollPane getScrollPane() {
		return scrollPane;
	}

	@Override
	public void setBounds(int x, int y, int width, int height) {
		textField.setBounds(0, 0, width, 23);
		scrollPane.setBounds(0, 22, width, height - 22);
		super.setBounds(x, y, width, height);
	}

	@Override
	public void setBounds(Rectangle rect) {
		setBounds(rect.x, rect.y, rect.width, rect.height);
	}

	public void disableText() {
		textField.setFocusable(false);
	}

	public void setListData(Object[] obj) {
		list.setListData(obj);
	}

	public void selectText(String str) {
		int size = list.getModel().getSize();
		if (size == 0)
			return;// 列表中没有任何元素
		int index = list.getNextMatch(str, 0, Position.Bias.Forward);
		if (index >= 0) {
			// 将所选的项目显示出来
			list.ensureIndexIsVisible(index);

			// 当完全匹配时,修正textField的值
			if (str.equalsIgnoreCase((String) (list.getModel()
					.getElementAt(index)))) {
				textField
						.setText((String) (list.getModel().getElementAt(index)));
				list.setSelectedIndex(index);
			} else {
				list.clearSelection();
			}
		} else {
			list.ensureIndexIsVisible(0);
			list.clearSelection();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -