Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Форматирован. вывод в TextArea


Автор: sidiakin 19.12.2012, 09:54
Как вывести форматированный текст в TextArea? Мне нужно чтобы выводились числа с нулями впереди 000123. Пытаюсь 

Код

str = String.format("%08d", str);
TextArea.append(str);


Java ругается на %d Пробовал %s - все работает

Автор: sidiakin 19.12.2012, 14:00
Все получилось Я разобрался

Автор: sidiakin 19.12.2012, 20:36
Еще вопросик.. Как сделать чтоб в TextArea можно было вводить только цифры, а если нажимается буквы то выдовать Ошибку ? Я в обработчике TextArea->KeyPressed написал 
Код

         if (key != 10)
            copy.errMessage();
        else if(key != 48)
            copy.errMessage();
        else if(key != 49)
            copy.errMessage();
        else if(key != 50)
            copy.errMessage();
        else if(key != 51)
            copy.errMessage();
        else if(key != 52)
            copy.errMessage();
        else if(key != 53)
            copy.errMessage();
        else if(key != 54)
            copy.errMessage();
        else if(key != 55)


Только у меня теперь errMessage выскакивает на любое нажатие 

Автор: Mirkes 31.12.2012, 00:36
Вообще-то в приведенном коде прямо написано - всегда ошибка. 
Проверьте. Пусть код равен ли в виду следующее:
Код

     if ((key != 10) && (key != 48)&&(key != 49)&& (key != 50)&&(key != 51)&&(key != 52)&&(key != 53)&&(key != 54)&&(key != 55)
            copy.errMessage();


хотя по человечески следовало бы написать так
Код

     if ((key != 10) && ((key < 48)||(key > 57))
            copy.errMessage();


Автор: dorogoyIV 31.12.2012, 03:39
Код

 private JTextArea jta = new JTextArea();

...

 public void keyPressed(KeyEvent e)
 {
  String text = jta.getText();

  if(!Character.isDigit(e.getKeyChar()))
  {
   JOptionPane.showMessageDialog(null, "not digit");
   jta.setText(text);
  }
 }


этот вариант подходит только для целых положительных чисел, поэтому я обычно использую такой:
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Main extends JFrame
{
    private NumberTextField ntf = new NumberTextField();
    
    public Main()
    {
        add(ntf);
    }

    public static void main(String [] args)
    {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Main main = new Main();
                main.setDefaultCloseOperation(3);
                main.setBounds(100, 100, 400, 300);
                main.setVisible(true);}});
        }
}

class NumberTextField extends JTextField
            implements KeyListener, FocusListener
{
    private String s = "";

    NumberTextField()
    {
        setHorizontalAlignment(JTextField.CENTER);
        addKeyListener(this);
        addFocusListener(this);
        setValue(0);
    }

    public void setValue(double d)
    {
        setText(getNumber(d + "") + "");
    }

    public double getNumber()
    {
        return getNumber(getText());
    }

    private double getNumber(String text)
    {
        double d = 0;

        try
        {
            d = Double.parseDouble(text);
            s = d + "";
        }
        catch(NumberFormatException ex)
        {
            setText(s);
        }
        return d;
    }

    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_ESCAPE ||
            e.getKeyCode() == KeyEvent.VK_DELETE)
        {
            s = "";
            setText(s);
        }
    }

    public void keyReleased(KeyEvent e)
    {
        if(getText().length() > 1) //число может быть отрицательным,
                    //первый символ может быть минусом
            getNumber(getText());
    }
    public void keyTyped(KeyEvent e){}

    public void focusGained(FocusEvent e){}
    public void focusLost(FocusEvent e)
    {
        setText(getNumber() + "");
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)