在 JTextArea 中附加点(“.”),方向从右到左
Appending point (".") in JTextArea with rigth to left orientation
我在 Java (1.7 JRE) 中遇到了异常问题,我找不到解决方案。
我正在使用 JTextArea 以十进制数的形式在其中写入文本,例如从右到左方向的 123.4。每次我输入“。” in 出现在文本的开头,例如 .123,当我输入下一个数字时,它应该显示为 123.4
当我尝试使用键盘输入数字和使用我编写的方法通过 JButtons 输入数字时,都会发生这种情况。这是代码的一部分:
String number;
JTextArea textAreaUnos;
.
.
.
number=number+".";
textAreaUnos.setText(number);
我也试过这样写:
textAreaUnos.append(".");
但是我输入的结果是一样的,例如
123
.123
123.4
在从左到右的方向上,不会发生这种情况。
有没有人遇到过这样的问题,你们解决了吗?
确实,当您附加 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();
}
}
测试:
一种解决方法是使用 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);
});
}
}
我在 Java (1.7 JRE) 中遇到了异常问题,我找不到解决方案。
我正在使用 JTextArea 以十进制数的形式在其中写入文本,例如从右到左方向的 123.4。每次我输入“。” in 出现在文本的开头,例如 .123,当我输入下一个数字时,它应该显示为 123.4
当我尝试使用键盘输入数字和使用我编写的方法通过 JButtons 输入数字时,都会发生这种情况。这是代码的一部分:
String number;
JTextArea textAreaUnos;
.
.
.
number=number+".";
textAreaUnos.setText(number);
我也试过这样写:
textAreaUnos.append(".");
但是我输入的结果是一样的,例如
123
.123
123.4
在从左到右的方向上,不会发生这种情况。
有没有人遇到过这样的问题,你们解决了吗?
确实,当您附加 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();
}
}
测试:
一种解决方法是使用 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);
});
}
}