我在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
从左到右的方向,这种情况不会发生。
之前有没有人遇到这样的问题,你有没有设法解决它?
答案 0 :(得分:1)
一种解决方法是使用JTextPane
或JEditorPane
。以下是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);
});
}
}
答案 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();
}
}