高分求教:关于JTextField和JTable控件的两个问题。

jiaguanxin 2004-12-25 10:18:51
问题如下:
1、请问JTextField怎样实现数据格式的控制?例如输入日期、两位小数的浮点数等格式的数据。
2、JTable中的数据怎样实现只读?即允许鼠标选择数据的同时不允许用户修改其中的数据。

另:我用Java用的好累,感觉控件和.NET差别好大呀,而且关于控件的说明还特别难找,JBuilder的帮助也都语焉不详,太痛苦了。各位大大有没有感觉比较好的参考书,帮忙推荐一下,谢谢了。
...全文
96 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomcatjava 2004-12-26
  • 打赏
  • 举报
回复
另外还有一个高手写的,是输入IP的JTextField:
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.UIManager;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Dimension;
import java.awt.Toolkit;

public class JIPv4TextField extends JTextField {
JNumberField ip1 = new JNumberField(0, 3, 0, 255, true);
JNumberField ip2 = new JNumberField(0, 3, 0, 255, true);
JNumberField ip3 = new JNumberField(0, 3, 0, 255, true);
JNumberField ip4 = new JNumberField(0, 3, 0, 255, true);

public JIPv4TextField() {
this( "0.0.0.0" );
}

public JIPv4TextField( String strIpAddress ) {
setPreferredSize( new Dimension(250, 25) );
this.setLayout( new GridLayout(1, 9, 0, 0) );
ip1.setBorder(null);
ip2.setBorder(null);
ip3.setBorder(null);
ip4.setBorder(null);
this.add( createDot("") );
this.add( ip1 );
this.add( createDot(".") );
this.add( ip2 );
this.add( createDot(".") );
this.add( ip3 );
this.add( createDot(".") );
this.add( ip4 );
this.add( createDot("") );
this.setFocusable( false );
setIpAddress( strIpAddress );
}

private JLabel createDot( String dot ) {
JLabel lb = new JLabel( dot );
lb.setOpaque(false);
return lb;
}

/**
* 设置IP地址
* @param strIpAddress String
*/
public void setIpAddress(String strIpAddress) {
if(strIpAddress != null&&strIpAddress.equals("")){
ip1.setText("");
ip2.setText("");
ip3.setText("");
ip4.setText("");
}
else {
if (strIpAddress == null || (strIpAddress.indexOf(".") == -1)
|| (strIpAddress.split("\\.").length != 4)) {
throw new UnsupportedOperationException("Invalid IP Address:" +
strIpAddress);
}
String strIp[] = strIpAddress.split("\\.");
ip1.setText(strIp[0]);
ip2.setText(strIp[1]);
ip3.setText(strIp[2]);
ip4.setText(strIp[3]);
}
}
/**
* 取得IP地址
* @return String
*/
public String getIpAddress() {
String strIp1 = ip1.getText().trim();
String strIp2 = ip2.getText().trim();
String strIp3 = ip3.getText().trim();
String strIp4 = ip4.getText().trim();
return (strIp1.equals("") ? "0" : strIp1) + "." +
(strIp2.equals("") ? "0" : strIp2) + "." +
(strIp3.equals("") ? "0" : strIp3) + "." +
(strIp4.equals("") ? "0" : strIp4);
}

public String getText() {
return getIpAddress();
}

public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
}
JFrame frame = new JFrame();
//EXIT_ON_CLOSE == 3
frame.setDefaultCloseOperation(3);
frame.setTitle("JIPAddressField Demo");
frame.getContentPane().setLayout( new FlowLayout() );
frame.getContentPane().add( new JIPv4TextField() );
frame.getContentPane().add( new JIPv4TextField("255.255.255.255") );
JIPv4TextField ip = new JIPv4TextField();
ip.setIpAddress("192.168.0.122");
frame.getContentPane().add(ip);

System.err.println( new JIPv4TextField().getIpAddress() );

frame.setSize(400, 320);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation( (d.width - frame.getSize().width) / 2,
(d.height - frame.getSize().height) / 2);
frame.setVisible(true);
}
}
tomcatjava 2004-12-26
  • 打赏
  • 举报
回复
关于第一个问题,给你个例子,是只接受数字的JTextField:

import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;

public class JNumberField extends JTextField
{
private numDoc doc = null;

public JNumberField()
{
super(3);
setDocument( doc = new numDoc());
}
public JNumberField(int maxLen)
{
super();
setDocument( doc = new numDoc(maxLen));
}

public void setMaxLen( int maxLen ) {
doc.setMaxLen( maxLen );
}

public int getMaxLen() {
return doc.getMaxLen();
}

public static void main( String args[] ) {
JFrame f = new JFrame("Only input number characters" );
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
Container c = f.getContentPane();
JNumberField test;
c.add( test = new JNumberField(),BorderLayout.NORTH );
c.add( new JNumberField(),BorderLayout.CENTER );
c.add( new JNumberField( 10 ),BorderLayout.SOUTH );
test.setMaxLen( 5 );
f.pack();
f.show();
}
}

class numDoc extends PlainDocument
{
int maxLength = 3;

public numDoc(){}

public numDoc(int maxLen)
{
maxLength = maxLen;
}

public void setMaxLen( int maxLength ) {
this.maxLength = maxLength;
}

public int getMaxLen() {
return maxLength;
}

//在这里可以修改符合你的条件,如解析字符串为日期进行判断等。
public void insertString( int offset,String s,AttributeSet a ) throws BadLocationException
{
int len = getLength();
String str =getText(0,len);
if ( (str+s).length() > maxLength
|| ( str.trim().equals("0") && !s.substring(0,1).equals(".") && offset != 0 )
)
{
Toolkit.getDefaultToolkit().beep();
return;
}
try
{
Integer.parseInt( str+s );
}
catch ( Exception e )
{
Toolkit.getDefaultToolkit().beep();
return;
}
super.insertString(offset,s,a);
}
}
sqlink 2004-12-26
  • 打赏
  • 举报
回复
我回答你第二个问题先,
如果你想table不能修改又不能选择,只要设成setEnable(false)就可以了,
如果你要table不能修改但能选择,要稍微麻烦点,implement TableModel把isCellEditable的return弄成false,或直接extend AbstractTableModel,本来就已经是false了
jiaguanxin 2004-12-26
  • 打赏
  • 举报
回复
没人理我吗?救救我吧!谢谢

67,543

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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