Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置文本字段的宽度_Java_Swing_Jtextfield - Fatal编程技术网

Java 设置文本字段的宽度

Java 设置文本字段的宽度,java,swing,jtextfield,Java,Swing,Jtextfield,我想设置TextField可以接受的最大条目数,我使用了: setMaximumSize setPreferredWidth SetColumns 但他没能做到。我怎样才能做到呢 这是我的密码: import java.awt.*; import javax.swing.*; public class ButtonDemo extends JFrame { public static void main(String args[]){ JFrame jfrm = ne

我想设置TextField可以接受的最大条目数,我使用了:

setMaximumSize
setPreferredWidth
SetColumns
但他没能做到。我怎样才能做到呢

这是我的密码:

import java.awt.*;
import javax.swing.*;
public class ButtonDemo extends JFrame {

    public static void main(String args[]){
        JFrame jfrm = new JFrame("Sample program");
        Container Content =  jfrm.getContentPane(); 
        content.setBackground(Color.red);
        jfrm.setLayout(null);

        jfrm.setBounds(250, 150, 400, 400);
        JTextField text = new JTextField();
        Font font1 = new Font("Courier",Font.BOLD,12);
        text.setFont(font1); 
        text.setBounds(50, 15, 100, 30);

        JButton button1 = new JButton("PROGRAM"); 
        button1.setFont(font1);
        button1.setBounds(250, 15, 100, 40);
        button1.setBackground (Color.white);

        JButton button3 = new JButton("EXIT");
        button3.setBounds(250, 115, 100, 40);
        button3.setBackground (Color.cyan);
        button1.setForeground (Color.red);

        JButton button2 = new JButton("USER"); 
        button2.setBounds(250, 65, 100, 40);
        button2.setBackground (Color.WHITE);

        jfrm.add(button1);  
        jfrm.add(button2); 
        jfrm.add(button3); 
        jfrm.add(text); 

        jfrm.setVisible(true);  
        jfrm.setResizable(false);
    }
}

文本字段本身并不限制文本的长度。要获得所需的内容,您必须通过调用
setDocument()
或将其传递给构造函数,为textfield提供不同的文档

您的文档将是
javax.swing.text.document
的实例,例如
javax.swing.text.PlainDocument
的子类。然后重写
public void insertString(int offs、String str、AttributeSet a)抛出BadLocationException
方法

Swing似乎有一个
FixedLengthDocument
,但是它是
HTMLDocument
的私有静态内部类。但是,为了让您开始学习,下面是该类源代码的相关部分:

public void insertString(int offset, String str, AttributeSet a) throws BadLocationException {
  if (str != null && str.length() + getLength() <= maxLength) {
    super.insertString(offset, str, a);
  }
}
public void insertString(int offset、String str、AttributeSet a)引发BadLocationException{

如果(str!=null&&str.length()+getLength()文本字段本身不限制文本的长度。要获得所需的内容,必须向文本字段提供不同的文档,方法是调用
setDocument()
或将其传递给构造函数

您的文档将是
javax.swing.text.document
的一个实例,例如
javax.swing.text.PlainDocument
的一个子类。然后重写
public void insertString(int offs,String str,AttributeSet a)抛出BadLocationException
方法

Swing似乎有一个
FixedLengthDocument
,但是它是
HTMLDocument
的一个私有静态内部类。不过,为了让您开始学习,下面是该类源代码的相关部分:

public void insertString(int offset, String str, AttributeSet a) throws BadLocationException {
  if (str != null && str.length() + getLength() <= maxLength) {
    super.insertString(offset, str, a);
  }
}
public void insertString(int offset、String str、AttributeSet a)引发BadLocationException{

如果(str!=null&&str.length()+getLength()除了按照Thomas的建议使用不同的
文档
之外,您还可以使用.可能更简单。

除了按照Thomas的建议使用不同的
文档
之外,您还可以使用.可能更简单。

使用
文档过滤器
,如本教程所述

下面是我最近用来限制最大输入大小和框中字符类别的示例:

class SizeAndRegexFilter extends DocumentFilter {
  private int maxSize;
  private String regex;

  SizeAndRegexFilter (int maxSize,String regex) {
    this.maxSize=maxSize;
    this.regex=regex;

  } 
  public void insertString(FilterBypass fb, int offs,String str, AttributeSet a) throws BadLocationException {
    if ((fb.getDocument().getLength() + str.length()) <= maxSize && str.matches(regex))
        super.insertString(fb, offs, str, a);
    else
        Toolkit.getDefaultToolkit().beep();
  }

  public void replace(FilterBypass fb, int offs,int length, String str, AttributeSet a) throws BadLocationException {
    if ((fb.getDocument().getLength() + str.length()
             - length) <= maxSize  && str.matches(regex))
            super.replace(fb, offs, length, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
  }
}
class SizeAndRegexFilter扩展了DocumentFilter{
私有int-maxSize;
私有字符串正则表达式;
SizeAndRegexFilter(int-maxSize,字符串正则表达式){
这个.maxSize=maxSize;
this.regex=regex;
} 
public void insertString(FilterBypass fb、int offs、String str、AttributeSet a)引发BadLocationException{

如本教程所述,如果((fb.getDocument().getLength()+str.length())使用
DocumentFilter

下面是我最近用来限制最大输入大小和框中字符类别的示例:

class SizeAndRegexFilter extends DocumentFilter {
  private int maxSize;
  private String regex;

  SizeAndRegexFilter (int maxSize,String regex) {
    this.maxSize=maxSize;
    this.regex=regex;

  } 
  public void insertString(FilterBypass fb, int offs,String str, AttributeSet a) throws BadLocationException {
    if ((fb.getDocument().getLength() + str.length()) <= maxSize && str.matches(regex))
        super.insertString(fb, offs, str, a);
    else
        Toolkit.getDefaultToolkit().beep();
  }

  public void replace(FilterBypass fb, int offs,int length, String str, AttributeSet a) throws BadLocationException {
    if ((fb.getDocument().getLength() + str.length()
             - length) <= maxSize  && str.matches(regex))
            super.replace(fb, offs, length, str, a);
        else
            Toolkit.getDefaultToolkit().beep();
  }
}
class SizeAndRegexFilter扩展了DocumentFilter{
私有int-maxSize;
私有字符串正则表达式;
SizeAndRegexFilter(int-maxSize,字符串正则表达式){
这个.maxSize=maxSize;
this.regex=regex;
} 
public void insertString(FilterBypass fb、int offs、String str、AttributeSet a)引发BadLocationException{

如果((fb.getDocument().getLength()+str.length())问题在于布局管理器仍在负责布局,因此,请设置MaximumSize setPreferredWidth不起作用

要在开始时解决此问题,需要将布局管理器设置为null

jfrm.setLayout(null);
尽管如此,您需要使用组件的绝对定位

也看到

问题在于您的布局管理器仍在负责布局,因此,请设置MaximumSize setPreferredWidth不起作用

要在开始时解决此问题,需要将布局管理器设置为null

jfrm.setLayout(null);
尽管如此,您需要使用组件的绝对定位

也看到

我对你的程序做了一些修改,让你的东西正常工作,请看一下:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class ButtonDemo extends JFrame {    

    public static void main(String args[]){
        JFrame jfrm = new JFrame("Sample program");
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfrm.setLocationByPlatform(true);
        Container content =  jfrm.getContentPane(); 
        content.setBackground(Color.red);
        jfrm.setLayout(null);

        jfrm.setBounds(250, 150, 400, 400);
        JTextField text = new JTextField();
        Font font1 = new Font("Courier",Font.BOLD,12);
        text.setFont(font1); 
        text.setBounds(50, 15, 100, 30);

        AbstractDocument abdoc;
        Document doc = text.getDocument();
        if (doc instanceof AbstractDocument)
        {
            abdoc = (AbstractDocument) doc;
            abdoc.setDocumentFilter(new DocumentSizeFilter(4));
        }

        JButton button1 = new JButton("PROGRAM"); 
        button1.setFont(font1);
        button1.setBounds(250, 15, 100, 40);
        button1.setBackground (Color.white);

        JButton button3 = new JButton("EXIT");
        button3.setBounds(250, 115, 100, 40);
        button3.setBackground (Color.cyan);
        button1.setForeground (Color.red);

        JButton button2 = new JButton("USER"); 
        button2.setBounds(250, 65, 100, 40);
        button2.setBackground (Color.WHITE);

        jfrm.add(button1);  
        jfrm.add(button2); 
        jfrm.add(button3); 
        jfrm.add(text); 

        jfrm.setVisible(true);  
        jfrm.setResizable(false);
    }
}

class DocumentSizeFilter extends DocumentFilter {

   private int max_Characters;
   private boolean DEBUG;

   public DocumentSizeFilter(int max_Chars) {

      max_Characters = max_Chars;
      DEBUG = false;
   }

   public void insertString(FilterBypass fb
                            , int offset
                              , String str
                                , AttributeSet a) 
   throws BadLocationException {

      if (DEBUG) {

         System.out.println("In DocumentSizeFilter's insertString method");
      }

      if ((fb.getDocument().getLength() + str.length()) <= max_Characters) 
         super.insertString(fb, offset, str, a);
      else 
         Toolkit.getDefaultToolkit().beep();
   }

   public void replace(FilterBypass fb
                       , int offset, int length
                       , String str, AttributeSet a)
   throws BadLocationException {

      if (DEBUG) {

         System.out.println("In DocumentSizeFilter's replace method");
      }
      if ((fb.getDocument().getLength() + str.length()
           - length) <= max_Characters) 
         super.replace(fb, offset, length, str, a);
      else
         Toolkit.getDefaultToolkit().beep();
   }
}
import java.awt.*;
导入javax.swing.*;
导入javax.swing.text.*;
公共类ButtonDemo扩展JFrame{
公共静态void main(字符串参数[]){
JFrame jfrm=新JFrame(“示例程序”);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfrm.setLocationByPlatform(真实);
容器内容=jfrm.getContentPane();
内容。挫折背景(颜色:红色);
jfrm.setLayout(空);
jfrm.立根(250150400400);
JTextField text=新的JTextField();
Font font1=新字体(“信使”,字体粗体,12);
text.setFont(font1);
文本.立根(50,15,100,30);
abdoc文件摘要;
Document doc=text.getDocument();
if(抽象文档的文档实例)
{
abdoc=(抽象文档)文档;
abdoc.setDocumentFilter(新DocumentSizeFilter(4));
}
JButton button1=新JButton(“程序”);
按钮1.设置字体(font1);
按钮1.立根(250、15、100、40);
按钮1.背景(颜色:白色);
JButton button3=新JButton(“退出”);
按钮3.立根(250、115、100、40);
按钮3.背景(颜色为青色);
按钮1.设置前景(颜色:红色);
JButton button2=新JButton(“用户”);
按钮2.立根(250、65、100、40);
按钮2.背景(颜色:白色);
jfrm.add(按钮1);
jfrm.add(按钮2);
jfrm.add(按钮3);
jfrm.add(文本);
jfrm.setVisible(真);
jfrm.setresizeable(false);
}
}
类DocumentSizeFilter扩展了DocumentFilter{
私有int max_字符;
私有布尔调试;
公共文档大小筛选器(int max_Chars){
最大字符数=最大字符数;
调试=错误;
}
public void insertString(FilterBypass)
,整数偏移量
,String str
,属性集a)
抛出BadLocationException{