我正在 Java 中制作一个矩阵计算器,使用 JPanel 上的 JTextFields 二维数组来输入给定的矩阵。由于放置此矩阵的面板具有固定大小,因此我想缩小文本大小以适应输入数字的长度。
例如: 如果是一位数长,则字体大小 = 18。如果是两位数长,则字体大小 = 14。等等。 我希望这种情况在用户输入文本时动态发生,并且我希望每次用户与 JTextField 交互时都发生重新绘制,而不仅仅是在用户按“enter”键之后。这是因为该字段是透明的,并且当前看起来很草率(数字重叠),直到用户按下 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);
}
}
最佳答案
I want to scale down the text size to accommodate how long the number is as it's being typed in.
查看 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 教程以更好地了解此主题。
如果您想在矩阵中输入 float (或 double ),那么格式化文本字段或旋转器可能是比纯文本字段更好的选择。查看 How to Use Formatted Text Fields 和 How to Use Spinners 教程。
关于java - 如何缩放字体大小以自动适应静态 JTextField 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22388100/