62,620
社区成员
发帖
与我相关
我的任务
分享
import java.awt.Container;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
//程序放在一个文件中,只有一个类
public class Test extends JFrame implements ActionListener // 需要用到文本监听器、动作监听器
{
// 声明控件与变量
int zhong = 0; // 数值转换的中间变量
boolean flag = false;// 按钮标志位
JPanel panel; // 一个panel容器
JButton changeButton; // 声明转换按钮
JLabel[] title = new JLabel[4]; // label组
JTextField[] value = new JTextField[4]; // 文本框组
private int[] to_int = new int[] { 2, 8, 10, 16 };
// 构造
public Test() {
super("Java程序设计"); // JFrame参数
Container content = this.getContentPane(); // 容器对象声明
content.setLayout(null); // 布局为空
panel = new JPanel(null); // panel定义
panel.setBounds(new Rectangle(0, 0, 300, 350));// 定义panel显示区域
panel.setBorder(BorderFactory.createTitledBorder("进制转换器")); // panel标题
title[0] = new JLabel("二进制");// label
title[1] = new JLabel("八进制");
title[2] = new JLabel("十进制");
title[3] = new JLabel("十六进制");
for (int i = 0; i < title.length; i++)
// 添加label
title[i].setBounds(new Rectangle(10, 20 + i * 60, 70, 35));
for (int i = 0; i < value.length; i++) // 文本框初始化
{
value[i] = new JTextField(20);
final JTextField f = value[i];
f.setBounds(new Rectangle(80, 20 + i * 60, 180, 25));
final int radix = to_int[i];
f.setDocument(new PlainDocument() {
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
// TODO Auto-generated method stub
System.out.println(offs);
System.out.println(str);
try {
Test.this.zhong = Integer.parseInt(valueAfterInsert(f
.getText(), str, offs), radix);
super.insertString(offs, str, a);
} catch (Exception e) {
Toolkit.getDefaultToolkit().beep();
return;
}
}
private String valueAfterInsert(String str, String insertStr,
int offs) {
String rs = "";
if (offs == str.length()) {
rs = str + insertStr;
} else {
rs = str.substring(0, offs) + insertStr
+ str.substring(offs + 1);
}
return rs;
}
});
}
changeButton = new JButton("转换");// 转换纽
changeButton.setBounds(new Rectangle(60, 260, 210, 25));
changeButton.addActionListener(this);
for (int i = 0; i < title.length; i++)
// 向panel添加控件
panel.add(title[i]);
for (int i = 0; i < value.length; i++)
panel.add(value[i]);
panel.add(changeButton);
content.add(panel); // 向content中添加panel
setSize(300, 350); // 窗口大小
this.setLocationRelativeTo(null); // 居中
setResizable(false);// 禁止改变窗口大小
setVisible(true); // 显示
}
public void actionPerformed(ActionEvent e)// 按钮监听动作后实现
{
if (e.getSource() == changeButton) {
if (!flag) {
value[0].setText(Integer.toBinaryString(zhong)); // 十转二函数
value[1].setText(Integer.toOctalString(zhong));// 十转八函数
value[2].setText(Integer.toString(zhong));// int转字符串函数
value[3].setText(Integer.toHexString(zhong)); // 十转十六函数
flag = true;
changeButton.setText("清空");
} else if (flag)// 清空
{
for (int i = 0; i < 4; i++)
value[i].setText("");
zhong = 0;
flag = false;
changeButton.setText("转换");
}
}
}
public static void main(String[] args) {
Test cr = new Test();// 构造后,产生窗口
cr.addWindowListener(new WindowAdapter()// 关闭按钮响应
{
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import net.java.dev.designgridlayout.DesignGridLayout; // 一个布局管理器
public class NumberConverter extends JFrame{
private static final long serialVersionUID = 1111111111111L;
public NumberConverter() {
super("Number Converter");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(this.initContentPane());
this.pack();
}
private JPanel initContentPane() {
JPanel panel = new JPanel();
final JTextField inputField = new JTextField(new DecimalDocument(),"Input a decimal number",25);
final JTextField binaryField = new JTextField(25);
final JTextField octalField = new JTextField(25);
final JTextField hexadecimalField = new JTextField(25);
final JButton convertButton = new JButton("转换");
final JButton clearButton = new JButton("清空");
binaryField.setEditable(false);
octalField.setEditable(false);
hexadecimalField.setEditable(false);
convertButton.setEnabled(false);
convertButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
int value = Integer.parseInt(inputField.getText());
binaryField.setText(Integer.toBinaryString(value));
octalField.setText(Integer.toOctalString(value));
hexadecimalField.setText(Integer.toHexString(value));
}
});
clearButton.setEnabled(false);
clearButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent arg0) {
inputField.setText("");
binaryField.setText("");
octalField.setText("");
hexadecimalField.setText("");
}
});
inputField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(final DocumentEvent e) {
this.setButtonState(e);
}
@Override
public void insertUpdate(final DocumentEvent e) {
this.setButtonState(e);
}
@Override
public void changedUpdate(final DocumentEvent e) {
this.setButtonState(e);
}
private void setButtonState(final DocumentEvent e) {
boolean enable = e.getDocument().getLength() != 0;
convertButton.setEnabled(enable);
clearButton.setEnabled(enable);
}
});
// 以下布局
DesignGridLayout layout = new DesignGridLayout(panel);
layout.row().grid(new JLabel("十进制")).add(inputField);
layout.row().center().add(convertButton).add(clearButton);
layout.row().grid(new JLabel("二进制")).add(binaryField);
layout.row().grid(new JLabel("八进制")).add(octalField);
layout.row().grid(new JLabel("十六进制")).add(hexadecimalField);
return panel;
}
public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new NumberConverter();
frame.setVisible(true);
}
});
}
}
class DecimalDocument extends PlainDocument {
private static final long serialVersionUID = 1L;
@Override
public void insertString(final int offset, final String input, final AttributeSet a) throws BadLocationException {
try {
int value = Integer.parseInt(input);
}catch(NumberFormatException e){
return;
}
super.insertString(offset, input, a);
}
}
@Override
public void insertString(int offset, String input, AttributeSet attributeset) throws BadLocationException {
if (input.matches("[^\\d\\.]+")) return; //输入非数字和小数点。则忽略
super.insertString(offset, input, attributeset);
}