Avatar billede dresen Nybegynder
08. juni 2003 - 02:14 Der er 5 kommentarer og
2 løsninger

Location i JTextArea

Hej..

Jeg er ved at lave et program, hvor jeg gør brug af et JTextArea.

Jeg har tilføjet en KeyListener til mit area, og vil nu gerne have en JPopupMenu til at fremkomme på baggrund af de indtastede (f.eks. hver gang der er et ord, der er på mere end 5 bogstaver). Jeg bruger metoderne fra interfacet KeyListener til at kontrollere begivenhederne

Ovenstående kan jeg godt få til at virke, men jeg kunne godt tænke mig at menuen fremkom et bestemt antal pixels under det sted, hvor jeg netop er i gang med at skrive i mit area.

noget i stil med:

  menu.setLocation( currentX + 10 , currentY + 10);

men hvordan får jeg fat i min nuværende position i mit textarea?
Avatar billede dash Nybegynder
08. juni 2003 - 02:54 #1
kan du ikke opdatere en cursor-position i field-variable, hver gang der trykkes på en tast..
..og så angive position derudfra?
Avatar billede dresen Nybegynder
08. juni 2003 - 03:22 #2
kan jeg få dig til at uddybe det - er ikke velbevandret i api'et
Avatar billede repsak Nybegynder
08. juni 2003 - 10:22 #3
hmm ifølge Doc. for JTextComponent og JTextArea så kan du ikke finde skærmkoordinaterne for caret direkte... Du kan finde caretens position i JTextArea, men det kan du jo ikke bruge til så meget i denne situation
Avatar billede _carsten Nybegynder
08. juni 2003 - 14:29 #4
Uden at vide det, har ej heller testet det, men jeg tror det er nemmere et indsætte en scrollable JList ved caretPosition som du så kan fjerne igen alt afhængende af brugerens valg.

Jeg tror også jeg ville bruge et JEditorPane eller JTextPane i stedet for, det er langt mere fleksibelt.

Et forslag du måske kan arbejde videre med, har ikke selv tid til at teste det.
Ellers kig her.: http://java.sun.com/docs/books/tutorial/uiswing/components/simpletext.html
Avatar billede ulrikm Nybegynder
09. juni 2003 - 00:02 #5
Kan du ikke bruge getMagicCaretPosition()?


class CaretPopup
{

  public static void main( String[] args )
  {
      javax.swing.JFrame frame = new javax.swing.JFrame();
      final javax.swing.JTextArea textArea
        = new javax.swing.JTextArea();
      final javax.swing.JPopupMenu popup
        = new javax.swing.JPopupMenu();
      popup.add( "Hello" );
      textArea.add( popup );
      textArea.addKeyListener
        (
            new java.awt.event.KeyAdapter()
            {
              public void keyReleased( java.awt.event.KeyEvent e )
              {
                  if(e.getKeyCode()==java.awt.event.KeyEvent.VK_P)
                  {
                    java.awt.Point pos
                        = textArea.getCaret().getMagicCaretPosition();
                    popup.show( textArea, pos.x, pos.y );
                  }
              }
            }
        );
      frame.getContentPane().setLayout(new java.awt.BorderLayout());
      frame.getContentPane().add(
        new javax.swing.JScrollPane(textArea),
        java.awt.BorderLayout.CENTER );
      frame.pack();
      frame.show();
  }

}
Avatar billede dresen Nybegynder
09. juni 2003 - 14:58 #6
Tak for jeres svar.

Jeg har nærmer mig en deadline lige nu, så jeg har ikke haft tid til at sætte mig ind i alle jeres forslag. Men vil se nærmere på jeres forslag når jeg får tid.

ulrikm > speciel tak til for dit løsningforslag (hvilket jo egentlig er en færdig løsning :). Dit forslag gør præcis, det som jeg havde tænkt mig. Vil begynde at sætte mig nærmere ind i din kode nu - er der nogen gode steder at læse om det, eller er det i api'et det sker ?

Mange tak for hjælpen





, og især tak til dig ulrikm, det er jo helt uovertruffent.

Din løsning er lige som jeg
Avatar billede dresen Nybegynder
09. juni 2003 - 14:59 #7
hehe - noget jeg havde glemt at slette - svært at lægge skjul på begejstringen nu :)
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