我正在使用JPanel上的二维JTextFields数组在Java中创建一个Matrix计算器来输入给定的Matrix。由于放置此矩阵的面板具有固定大小,因此我希望缩小文本大小以适应数字输入时的长度。
例如: 如果它是一位数长,字体大小= 18.如果它是两位数长,字体大小= 14等。 我希望这可以在用户输入文本时动态发生,并且我希望每次用户与JTextField交互时都会重新绘制,而不仅仅是在用户按下“enter”之后。这是因为该字段是透明的,并且当前看起来很邋(数字重叠),直到用户按下回车。
最简单可靠的方法是什么?这是我当前的代码,如果它可以帮助任何人回答我的问题:
public class MatrixPanel extends JPanel implements ActionListener
{
float[][] matrice = new float[3][3];
JTextField[][] parameter = new JTextField[3][3];
Font font = new Font("SansSerif", Font.BOLD, 40);
public MatrixPanel(String title)
{
setLayout(null);
setOpaque(false);
for (int width = 0; width < 3; width++){
for (int height = 0; height < 3; height++){
matrice[width][height] = 0;
parameter[width][height] = new JTextField();
parameter[width][height].setHorizontalAlignment(JTextField.CENTER);
parameter[width][height].setFont(font);
parameter[width][height].setText("0");
parameter[width][height].setLocation((50*width), (50*height));
parameter[width][height].setSize(50,50);
parameter[width][height].setOpaque(false);
parameter[width][height].setBorder(null);
parameter[width][height].addActionListener(this);
add(parameter[width][height]);
}
setSize(150,150);
}
}
答案 0 :(得分:2)
我想缩小文字大小以适应数字的长度 正如它被输入一样。
了解How to Write a DocumentListener以实现目标。
关于setSize(150,150)
和setLocation((50*width), (50*height))
:请查看此主题Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是的,我们应该)。组件大小和位置应由布局管理员处理。
您可能需要尝试GridLayout将文本字段放在网格中,并忘记固定的大小/位置。有关此主题的更好理解,请参阅How to Use GridLayout和Laying Out Components Within a Container教程。
如果要在矩阵中输入浮点数(或双精度数),那么格式化文本字段或微调器可能是纯文本字段的更好选择。查看How to Use Formatted Text Fields和How to Use Spinners教程。