Avatar billede banielsen Nybegynder
06. oktober 2004 - 12:48 Der er 3 kommentarer og
1 løsning

Keylistener på JTextArea

Hej

Jeg ønsker et JTextArea hvor man maks må indtaste 4 linier og på hver linie må der maks være 20 tegn.
Jeg har selv forsøgt med følgende kode, men det virker ikke ordentlig.

public void keyTyped(KeyEvent e)
    {
        char c = e.getKeyChar();
        int linie=0;
        int start=0;
        int end=0;
        try
        {
            linie=(int)((textBeskrivelse.getCaret().getMagicCaretPosition().getY())/18);
            start=(textBeskrivelse.getLineStartOffset(linie));
            end=(textBeskrivelse.getLineEndOffset(linie))+1;
           
            if((end-start)>20)
            {
                  if (!(c==KeyEvent.VK_ENTER||c==KeyEvent.VK_BACK_SPACE))
                    {
                        e.consume();
                }
            }
        }
        catch (Exception ex)
        {
        }
    }
   
    public void keyReleased (KeyEvent e)
    {
    }
   
    public void keyPressed(KeyEvent e)
    {
        char c = e.getKeyChar();
        if(!(textBeskrivelse.getLineCount()<4))
        {
            if (c==KeyEvent.VK_ENTER)
                {
                e.consume();
            }
        }
    }

(textBeskrivelse = JtextArea)
Avatar billede baitianlong Nybegynder
07. oktober 2004 - 22:24 #1
if(textarea.getText().length() > 20) {
  tekst = textarea.getText();
  textarea.setText(tekst.substring(0, 20) + "\n" + tekst.substring(21, tekst.length());
}
if(textarea.getText().length() > 40) {
  tekst = textarea.getText();
  textarea.setText(tekst.substring(0, 20) + "\n" + tekst.substring(21, 40) + "\n" + tekst.substring(41, tekst.length());
... og så videre...

Kan også gøres rekursiv, men det gider jeg ikke. Du kan nok se ide'en i dette :))
Avatar billede _carsten Nybegynder
08. oktober 2004 - 20:11 #2
Jeg ved ikke om du har fået løst problemet, ellers er der en løsning her.


import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JTextArea;

public class ExpTextArea extends javax.swing.JFrame{
    public ExpTextArea(){
        getContentPane().add(new Area());
        setSize(300,300);
    }
   
    public static void main(String[] args){
        new ExpTextArea().setVisible(true);
    }
}


class Area extends JTextArea implements KeyListener{
    public Area() {
        addKeyListener(this);
        height = getRowHeight();
    }
   
    public void remove(java.awt.MenuComponent comp) {
    }
   
    public void keyPressed(java.awt.event.KeyEvent e) {
        try{
            line = modelToView(getCaretPosition()).y / height;
            if(e.getKeyCode() == KeyEvent.VK_ENTER && line >= 3){
                e.consume();
            }
        }
        catch (javax.swing.text.BadLocationException b){
            b.printStackTrace();
        }
    }
   
    public void keyReleased(java.awt.event.KeyEvent e) {

    }
   
    public void keyTyped(java.awt.event.KeyEvent e) {
        try{
            line = modelToView(getCaretPosition()).y / height;
            if( (getLineEndOffset(line) - getLineStartOffset(line)) >= 20){
              e.consume();
            }
        }
        catch (javax.swing.text.BadLocationException b){
            b.printStackTrace();
        }
    }
   
    private int height, line;
}
Avatar billede banielsen Nybegynder
09. oktober 2004 - 13:45 #3
perfekt eksempel Carsten.. smid et svar:-)
Avatar billede _carsten Nybegynder
09. oktober 2004 - 13:49 #4
Kommer straks !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester