【问题标题】:jtextfield default cursor positionjtextfield 默认光标位置
【发布时间】:2012-03-17 00:54:41
【问题描述】:

我正在使用JTextField 和文本字段的代码。我正在尝试使文本字段与记事本一样大,但光标始终出现在中间。我想放在文本字段的开头。

tf=new JTextField(50);
tf.setCaretPosition(0);

f.setLayout(new BorderLayout());
f.add(tf,BorderLayout.CENTER);

【问题讨论】:

    标签: java swing


    【解决方案1】:

    不是一个很明确的问题。由于您将文本字段添加到 BorderLayout 的中心,因此文本字段将自动调整垂直和水平大小以填充框架中的可用空间。

    默认情况下,光标将水平显示在左侧,垂直显示在中心。所以我想垂直对齐是你抱怨的。好吧,我不知道有什么办法可以解决这个问题,因为这是文本字段 UI 的工作方式。

    如果您更改文本的字体大小,那么它会显得更大,并且插入符号会出现在顶部。

    我建议您尝试使用 JTextArea。 Single Line Text Area 可以按照您想要的方式工作。

    【讨论】:

      【解决方案2】:

      尝试设置文本对齐方式:

      JTextField textfield = new JTextField("Initial Text");
      
      // Left-justify the text
      textfield.setHorizontalAlignment(JTextField.LEFT);
      
      // Center the text
      textfield.setHorizontalAlignment(JTextField.CENTER);
      
      // Right-justify the text
      textfield.setHorizontalAlignment(JTextField.RIGHT);
      

      【讨论】:

      • 我不会把它标记下来,因为它仍然是有用的信息,但它不是正确的答案——JTextField 默认为水平对齐,和海报的问题是垂直对齐的(如果您运行代码,您可以快速查看)。
      • 糟糕——应该是:“默认为 center 水平对齐”。
      【解决方案3】:

      由于JTextField 仅包含一行文本,您最好调整JTextField 的大小更合适。

      据我所知,没有什么好方法可以完全按照您的要求进行。请注意,虽然有setHorizontalAlignment(),但没有对应的setVerticalAlignment()setAlignmentY() 也不这样做(设置添加到容器的组件的对齐方式,这对于 JTextField 没有意义)。

      你可以通过将JTextField放在BorderLayout的北边来伪造它,如下:

      tf.setBorder(null);
      f.setBackground(Color.WHITE);
      f.add(tf, BorderLayout.NORTH);  
      f.add(Box.createVerticalGlue(), BorderLayout.CENTER);
      

      但我怀疑你真正想要的可能是多行,在这种情况下你应该使用JTextArea

      【讨论】:

        【解决方案4】:

        您应该使用 JScrollPane。它将提供一个滚动条,也将满足您的需求。

        JTextArea area=new JTextArea();
        JScrollPane scroll=new JScrollPane(area);
        cnt.add(scroll);
        area.setLineWrap(true);
        scroll.setBounds(320, 100, 650, 300);
        

        【讨论】:

        • 不错的尝试 :-) 但实际上......不是问题的答案。除此之外:永远不要手动定位/调整组件大小,这是 LayoutManager 的专属工作。
        猜你喜欢
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 2012-06-12
        • 1970-01-01
        • 2013-09-25
        相关资源
        最近更新 更多