【发布时间】:2015-09-03 15:50:12
【问题描述】:
我有以下代码
import javax.swing.*;
import java.awt.*;
import net.miginfocom.swing.MigLayout;
import Sorts.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.Color;
public class SortsGui
{
JFrame myMainWindow = new JFrame("Sorts");
JPanel sortPanel = new JPanel();
//first panel components
public int nextTextBox = 20;
JTextField[] allField = new JTextField [25];
//end first panel
public void runGUI()
{
myMainWindow.setBounds(10, 10, 800, 800);
myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myMainWindow.setLayout(new GridLayout(1,1));
createSortTestPanel();
myMainWindow.getContentPane().add(sortPanel);
myMainWindow.setVisible(true);
}
public void createSortTestPanel()
{
MigLayout layout = new MigLayout("" , "[grow]");
sortPanel.setLayout(layout);
refreshScreen();
}
public void refreshScreen()
{
sortPanel.removeAll();
for(int i = 0; i<nextTextBox;i++)
{
int fix = i+1;
allField[i] = new JTextField("");
sortPanel.add(allField[i],"growx");
allField[i].addKeyListener(new KeyListener ()
{
public void keyPressed(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
char c = e.getKeyChar();
if(Character.isDigit(c))
{
}
else
{
e.consume();
}
try
{
int parseTest = Integer.parseInt(allField[i].getText());
}
catch(Exception exc)
{
allField[i].setBackground(Color.RED);
}
}
});
}
}
public static void main(String[] args)
{
SortsGui sG = new SortsGui();
sG.runGUI();
}
}
我的目标是创建一个 JTextField 数组,其中包含一个 keylistener。这个 keylistener 应该防止在 JTextField 中输入除数字以外的任何内容。如果输入的数字不是 int,它还应该更改 JTextField 的背景颜色。例如 2147483647554。 但是,当我编译这个时,我得到了错误
那么我该如何做到这一点,使其在所有 JTextField 上都是最终的或有效地最终的?
【问题讨论】:
-
“我的目标是创建一个 JTextField 数组,其中包含一个 keylistener。这个 keylistener 应该防止在 JTextField 中输入除数字以外的任何内容” - 然后使用
DocumentFilter而不是 -
*"如果输入的数字不是 int,它还应该改变 JTextField 的背景颜色" - 然后使用
InputVerifier -
您可以通过添加变量 final int index = i; 来修复错误。在你的循环中并引用它而不是 i
-
您也可以使用
e.getSource(),而不是直接使用allField[i]。这样,您也可以为所有 JTextField 重用相同的侦听器对象。
标签: java arrays swing keylistener miglayout