我又来了,继续求助,谢谢。

a1143934776 2013-06-15 09:46:29
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Arrays;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JLabel;

public class SortArray054 extends JFrame {

private JPanel contentPane;
private JTextField textField;
private JTextArea sortArea;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SortArray054 frame = new SortArray054();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public SortArray054() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

textField = new JTextField();
textField.addKeyListener(new KeyAdapter()
{
public void KeyPressed(KeyEvent e)
{
do_textField_keyPressed(e);
}
public void KeyType(KeyEvent e)
{
char key=e.getKeyChar();
//获取一个与此事件相关联的字符。
String mask="0123456789"+(char)8;
if(mask.indexOf(key)==-1)
//如果字符串中没有这样的字符。
{
e.consume();
//使用此事件,以便不会 按照默认的方式 由产生此事件的 源代码处理此事件。
//意思是取消非规范化字符的输入有效性。
}
}
});
textField.setBounds(10, 30, 414, 35);
contentPane.add(textField);
textField.setColumns(10);

JButton button = new JButton("\u6392\u5E8F");
button.addActionListener(new ActionListener()
{

@Override
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);

}

});
button.setBounds(165, 86, 93, 23);
contentPane.add(button);

sortArea = new JTextArea();
sortArea.setBounds(10, 130, 414, 122);
contentPane.add(sortArea);

JLabel label = new JLabel("\u8F93\u5165\u6570\u7EC4\u5185\u5BB9\uFF0C\u7A7A\u683C\u4E3A\u6570\u7EC4\u5143\u7D20\u5206\u9694\u7B26");
label.setBounds(10, 5, 248, 15);
contentPane.add(label);
}

protected void do_button_actionPerformed(ActionEvent e) {
String text=textField.getText();
//获取用户输入字符串。
String[] arrayStr=text.split(" {1,}");
//用空格符拆分用户的输入为数组。
int[] array=new int[arrayStr.length];
//创建长度为输入的字符数组的长度的整数类型数组。
sortArea.setText("数组原有内容: \n");
for(String str:arrayStr)//高级for循环。
{
sortArea.append(str+" ");
//输出原有数组内容。
}
for(int i=0;i<arrayStr.length;i++)
{
array[i]=Integer.parseInt(arrayStr[i]);
//初始化整型数组。将输入的字符串数组元素转换成整型
}
sortArea.append("\n");
//换行。
Arrays.sort(array);
//使用sort方法对整型数组进行排序。
sortArea.append("数组排序后内容: \n");
for(int value:array)
{
sortArea.append(value+" ");
}

}
protected void do_textField_keyPressed(KeyEvent e) {
char key = e.getKeyChar();// 获取用户按键字符
String mask = "0123456789 " + (char) 8;// 定义规范化字符模板
if (mask.indexOf(key) == -1) {// 判断按键字符是否属于规范化字符范围
e.consume();// 取消非规范化字符的输入有效性
}
}
}



好长啊,辛苦了,谢谢,有几个问题,请帮忙解决下。
	public void KeyPressed(KeyEvent e)
{
do_textField_keyPressed(e);
}

这个里面的do_textField_keyPressed(e);好像有没有都没什么关系的,而protected void do_textField_keyPressed(KeyEvent e) 这个方法都可以执行,为什么呢?


String mask = "0123456789 " + (char) 8;// 定义规范化字符模板
。这个是什么意思呢?包括它的注释,谢谢。
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
你怎么了熊吉 2013-06-16
  • 打赏
  • 举报
回复
(char) 8就是退格键 String mask = "0123456789 " + (char) 8 就是只接受数字键和退格键
zhangxm2015 2013-06-16
  • 打赏
  • 举报
回复
看来我还是太年轻啊,注释无法显示红色啊!! public void keyPressed(KeyEvent e) { //<span style="color: #FF0000;">这里方法名第一个字母要小些</span> do_textField_keyPressed(e); } public void keyTyped(KeyEvent e) //<span style="color: #FF0000;">这里方法名第一个字母要小些</span> { char key=e.getKeyChar(); //获取一个与此事件相关联的字符。 String mask="0123456789 "+(char)8; //<span style="color: #FF0000;">这里不要忘了带空格</span>
zhangxm2015 2013-06-16
  • 打赏
  • 举报
回复
引用 楼主 a1143934776 的回复:
这个里面的do_textField_keyPressed(e);好像有没有都没什么关系的,而protected void do_textField_keyPressed(KeyEvent e) 这个方法都可以执行,为什么呢?
该方法未被调用,这个方法不是没有用,而是楼主在事件监听中的方法名称错误,导致该方法未被调用。(keyPressed,keyType)这里的key必须小写
引用 楼主 a1143934776 的回复:
String mask = "0123456789 " + (char) 8;// 定义规范化字符模板 。这个是什么意思呢?包括它的注释,谢谢。
这里的字符串是用来判断,你按压的键的值是否为0~9和空格,及退格键,也就是对文本框的接受值做一个规范 还有你在keyType方法中的mask值未包含空格 下面是改写后的代码,详见红色标记

package zhangming.csdn.javase;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Arrays;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JLabel;

public class SortArray054 extends JFrame {

	private JPanel contentPane;
	private JTextField textField;
	private JTextArea sortArea;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					SortArray054 frame = new SortArray054();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public SortArray054() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		textField = new JTextField();
		textField.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e) {    //这里方法名第一个字母要小些
				do_textField_keyPressed(e);
			}
			public void keyTyped(KeyEvent e)       //这里方法名第一个字母要小些
			{
				char key=e.getKeyChar();
				//获取一个与此事件相关联的字符。
				String mask="0123456789 "+(char)8;       //这里不要忘了带空格
				if(mask.indexOf(key)==-1)
					//如果字符串中没有这样的字符。
				{
					e.consume();
					//使用此事件,以便不会   按照默认的方式    由产生此事件的   源代码处理此事件。
					//意思是取消非规范化字符的输入有效性。
				}
			}
		});
		textField.setBounds(10, 30, 414, 35);
		contentPane.add(textField);
		textField.setColumns(10);
		
		JButton button = new JButton("\u6392\u5E8F");
		button.addActionListener(new ActionListener()
		{

			@Override
			public void actionPerformed(ActionEvent e) {
				do_button_actionPerformed(e);
				
			}
			
		});
		button.setBounds(165, 86, 93, 23);
		contentPane.add(button);
		
		 sortArea = new JTextArea();
		sortArea.setBounds(10, 130, 414, 122);
		contentPane.add(sortArea);
		
		JLabel label = new JLabel("\u8F93\u5165\u6570\u7EC4\u5185\u5BB9\uFF0C\u7A7A\u683C\u4E3A\u6570\u7EC4\u5143\u7D20\u5206\u9694\u7B26");
		label.setBounds(10, 5, 248, 15);
		contentPane.add(label);
	}

	protected void do_button_actionPerformed(ActionEvent e) {
		String text=textField.getText();
		//获取用户输入字符串。
		String[] arrayStr=text.split(" {1,}");
		//用空格符拆分用户的输入为数组。
		int[] array=new int[arrayStr.length];
		//创建长度为输入的字符数组的长度的整数类型数组。
		sortArea.setText("数组原有内容: \n");
		for(String str:arrayStr)//高级for循环。
		{
			sortArea.append(str+" ");
			//输出原有数组内容。
		}
		for(int i=0;i<arrayStr.length;i++)
		{
			array[i]=Integer.parseInt(arrayStr[i]);
			//初始化整型数组。将输入的字符串数组元素转换成整型
		}
		sortArea.append("\n");
		//换行。
		Arrays.sort(array);
		//使用sort方法对整型数组进行排序。
		sortArea.append("数组排序后内容: \n");
		for(int value:array)
		{
			sortArea.append(value+" ");
		}
		
		    }
		 protected void do_textField_keyPressed(KeyEvent e) {
		        char key = e.getKeyChar();// 获取用户按键字符
		        String mask = "0123456789 " + (char) 8;// 定义规范化字符模板
		        if (mask.indexOf(key) == -1) {// 判断按键字符是否属于规范化字符范围
		        	e.consume();// 取消非规范化字符的输入有效性
		        }
		    }
	}


panzhixiong_cn 2013-06-15
  • 打赏
  • 举报
回复
String mask = "0123456789 " + (char) 8;// 定义规范化字符模板 双反斜杠后面不就是注释吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧