在JTextArea中添加点(“。”),其左侧方向为rigth

时间:2016-11-15 23:10:22

标签: java jtextarea right-to-left

我在Java(1.7 JRE)中遇到了不寻常的问题,我找不到解决方案。

我正在使用JTextArea以十进制数字的形式在其中写入文本,例如123.4,从右到左方向。每次我输入“。”在文本的开头出现,像这样.123当我输入下一个数字时,它显示出应该是123.4

当我尝试使用键盘输入数字和使用我写的方法通过JButton时,都会发生这种情况。这是代码的一部分:

        String number;
        JTextArea textAreaUnos;
        .
        .
        .
        number=number+".";
        textAreaUnos.setText(number);

我也试过这样写:

textAreaUnos.append(".");

但是当我输入时结果是相同的,例如

123
.123
123.4

从左到右的方向,这种情况不会发生。

之前有没有人遇到这样的问题,你有没有设法解决它?

2 个答案:

答案 0 :(得分:1)

一种解决方法是使用JTextPaneJEditorPane。以下是JTextPane的示例。

import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JTextPane;

import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;

class Demo{
    public static void main(String[]args){
        SwingUtilities.invokeLater(()->{
            JFrame frame=new JFrame("Right-Left");
            JTextPane box=new JTextPane();
            frame.getContentPane().add(box);
            SimpleAttributeSet attr = new SimpleAttributeSet();
            StyleConstants.setAlignment(attr, StyleConstants.ALIGN_RIGHT);
            box.setParagraphAttributes(attr, true);
            frame.setSize(300,200);
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        });
    }
}

This is what you get

答案 1 :(得分:0)

确实当你用RIGHT_TO_LEFT附加一个以非数字或字母结尾的字符串时输出错误(即123.转换为.123)

我设法通过检查字符是否为.isLetterOrDigit来追加它,并根据检查附加到开始或结束。我知道这很棘手,但这是我找到的唯一解决方案。

主:

import java.awt.ComponentOrientation;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Main extends JFrame {
  /**
     * 
     */
    private static final long serialVersionUID = 1L;

private JTextArea t1 = new JTextArea("", 10, 15), t2;

  public Main() {
    Box b = Box.createHorizontalBox();    
    b.add(new JScrollPane(t1));    
    t2 = new JTextArea(10, 15);
    t2.setEditable(false);
    b.add(new JScrollPane(t2));
    add(b); 
    setSize(425, 200);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t2.setComponentOrientation ( ComponentOrientation.RIGHT_TO_LEFT); 

    t1.addKeyListener ( new KeyListener( )
    {

        @Override
        public void keyTyped ( KeyEvent e )
        {
        }

        @Override
        public void keyReleased ( KeyEvent e )
        {
            char check = (char)e.getKeyCode ( );
            if(Character.isLetterOrDigit ( check ) )
            {
                t2.setText ( t1.getText ( ).substring ( 0 , t1.getText ( ).length ( )-1 ) + check);

            }
            else 
            {
                t2.setText ( check + t2.getText ( ) );
            }

        }

        @Override
        public void keyPressed ( KeyEvent e )
        {

        }
    });
  }
  public static void main(String args[]) {
    new Main();
  }
}

测试:

Testing