字符串解析-Java
我对java相当陌生,所以请对我放松点 我已经创建了一个窗口、窗格、标签、文本字段等字符串解析-Java,java,Java,我对java相当陌生,所以请对我放松点 我已经创建了一个窗口、窗格、标签、文本字段等 要查看用户在文本字段中输入的内容(作为字符串),最简单的代码是什么,正如我所知,对于float,您可以使用float.parseFloat(txtName.getText())?为了理解这个问题,这里有一个简单的例子,输出在JTextField中输入的内容并将其附加到JTextArea: public class Test { private static String ENTER = "Enter";
要查看用户在文本字段中输入的内容(作为字符串),最简单的代码是什么,正如我所知,对于float,您可以使用
float.parseFloat(txtName.getText())代码>?为了理解这个问题,这里有一个简单的例子,输出在JTextField
中输入的内容并将其附加到JTextArea
:
public class Test {
private static String ENTER = "Enter";
static JButton enterButton;
public static JTextArea output;
public static JTextField input;
static JFrame frame;
static JPanel panel;
public static void main(String... args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex)
{
ex.printStackTrace();
}
createFrame();
}
public static void createFrame()
{
frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setOpaque(true);
ButtonListener buttonListener = new ButtonListener();
output = new JTextArea(15, 50);
output.setWrapStyleWord(true);
output.setEditable(false);
JScrollPane scroller = new JScrollPane(output);
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
JPanel inputpanel = new JPanel();
inputpanel.setLayout(new FlowLayout());
input = new JTextField(20);
enterButton = new JButton("Enter");
enterButton.setActionCommand(ENTER);
enterButton.addActionListener(buttonListener);
input.setActionCommand(ENTER);
input.addActionListener(buttonListener);
DefaultCaret caret = (DefaultCaret) output.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
panel.add(scroller);
inputpanel.add(input);
inputpanel.add(enterButton);
panel.add(inputpanel);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.pack();
frame.setLocationByPlatform(true);
// Center of screen
// frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setResizable(false);
input.requestFocus();
}
public static class ButtonListener implements ActionListener
{
public void actionPerformed(final ActionEvent ev)
{
Thread thread = new Thread()
{
public void run()
{
if (!input.getText().trim().equals(""))
{
String cmd = ev.getActionCommand();
if (ENTER.equals(cmd))
{
output.append(input.getText() + "\n");
}
}
input.setText("");
input.requestFocus();
}
};
thread.start();
}
}
}
注意:如果您想真正做到这一点,可以实现JTextField的一个子类,它甚至不允许用户输入无效浮点数字符:
public class FloatField extends JTextField {
public FloatField(int cols) {
super(cols)
}
protected Document createDefaultModel() {
return new FloatDocument();
}
static class FloatDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if( str == null )
return;
// Reject any string with invalid float characters.
// TODO: this could be more sophisticated
int len = str.length();
for (int i = 0; i < len; ++i) {
char c = str.charAt(i);
if (c != '.' && c != '-' && !Character.isDigit(c))
return;
}
super.insertString(offs, str, a);
}
}
}
public类FloatField扩展了JTextField{
公共浮动区(整数列){
超级(cols)
}
受保护的文档createDefaultModel(){
返回新文档();
}
静态类FloatDocument扩展了PlainDocument{
公共void insertString(int offs、String str、AttributeSet a)
抛出BadLocationException{
如果(str==null)
返回;
//拒绝包含无效浮点字符的任何字符串。
//托多:这可能更复杂
int len=str.length();
对于(int i=0;i
注意:这是一个不完善的实现,仅用于说明目的,仍然有许多无效的浮点数允许泄漏。这个问题非常模糊,需要进一步澄清才能正确回答。不知道为什么会有这么多人反对,尤其是没有评论。我肯定其他人也问过同样的问题。无论如何,您的方法是正确的,但请务必使用try/catch,以防用户未输入有效的浮点数。我发现您的答案很有帮助,但Edward Falk的答案与我正在编写的程序更相关!如果你澄清了你的问题,也许我可以写一个更具体的答案。