Wklejania w odpowiednim JTextField

Wklejania w odpowiednim JTextField
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Witam !
W swoim programie mam kilka pol tekstowych (JTextField) i próbuje ustawić tak, że za pomocą prawego przycisku myszy (JPopupMenu) wkleja mi dany tekst do jednego aktualnie zaznaczonego pola.
Niestety nie wiem jak to zrobić, bo przy JTextArea nie ma z tym problemu ponieważ jest funkcja Insert() ale wie ktoś może jak to zrobić w JTextField?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

getText() => przeróbka Stringa => setText()


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

ale setText() wrzuca tekst do JTextFielda, który jest ustawiony odgórnie w kodzie a ja potrzebuje coś takiego co wklei tekst tam gdzie aktualnie znajduje się kursor.

GA
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
0

zawołaj metodę

Kopiuj
getFocusOwner()
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

a w jaki sposób wykorzystać tą funkcje bo za bardzo nie wiem?

Powinnienem chyba zacząć od:

Kopiuj
Component A = getFocusOwner()

I co dalej ?

GA
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
0

Np. ponazywaj komponenty(setName) a następnie na komponencie uzyskanym z metody getFocusOwner zawołaj getName

JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Mam dwa pola tekstowe JTextField i chce wkleić Stringa łańcuch do tego pola gdzie jest kursor czyli muszę to zrobić tak:

Kopiuj
JTextField A = new JTesxtField("");     //wiadomo ze jeszcze im nadam rozmiar, polozenie itd
JTextField B = new JTesxtField("");
A.setName("PoleA")
B.setName("PoleB")

//Teraz bedzie funkcja obslugujaca wciśnienie klawisza
Component C = getFocusOwner();
String nazwa = C.getName()

Nie bardzo wgl to rozumiem, mógłbyś mi to "łopatologicznie" wyjaśnić ?

edytowany 4x, ostatnio: janiu
GA
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
0
Kopiuj
String nazwa = C.getName();
        switch(nazwa){
            case "PoleA":
                A.setText("Foo");
                break;
            case "PoleB":
                B.setText("Foo");
                break;
            //...
        }
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Nie działa, wyskakują wyjątki.

GA
to trzeba poznać przyczynę i je obsłużyć :) podziel się nimi i napisz gdzie lecą...
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0
Kopiuj
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
	at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
	at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
	at java.lang.Double.parseDouble(Unknown Source)
	at MyFrame.actionPerformed(MyFrame.java:173)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
GA
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
0

Tutaj:

Kopiuj
 at MyFrame.actionPerformed(MyFrame.java:173)

Zabezpiecz się przed tym np w taki sposób:

Kopiuj
fooString != null && fooString.length() > 0
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

No tak teraz nie wyskakuje błąd ale również nie wkleja się tekst to pola.
Wyswietliłem teraz tego Stringa nazwa i jest równy null.

Tak wgl to nie rozumiem jednej rzeczy:
co robi ta linijka

Kopiuj
Component C = getFocusOwner();

bo ona chyba nie zmienia nazwy Componentu C, a potem porównujemy właśnie nazwę tego Componentu

GA
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
0

może inny komponent niż myślisz ma focus

JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

no nie wiem nie używałem wcześniej tej funkcji ale w dokumentacji jest napisane że zwraca obiekt Component

GA
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
0
  1. Nadajesz nazwę komponentom, żeby je zidentyfikować poprzez metodę setName
  2. Pobierasz komponent, który ma focus dzięki metodzie getFocusOwner
  3. Żeby odróżnić, który to komponent sprawdzasz jego nazwę poprzez getName i dalej coś robisz

Wypisz najprościej co zwraca Ci getFocusOwner

Kopiuj
System.out.println(C);
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0
Kopiuj
javax.swing.JButton[,100,150,100x20,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@e31770b,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Konwertuj,defaultCapable=true]
GA
czyli przycisk ma focus, napisz lepiej co robisz po kolei i co chcesz osiągnąć
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Mam dwa pola JTextField i chce żeby naciskając prawym przyciskiem myszy wybrać opcje Wklej i wklejało tekst tylko w to jedno pole w którym właśnie jest kursor.
Gdyby to były JTextArea wtedy nie ma problemu bo uzyl bym:

Kopiuj
JTesxtAreas pole
pole.insert("tekst",pole.getCaretposition())
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Gdyby były dwa JTextArea, to problem byłby taki sam. Problem wynika nie z typu komponentu, ale z tego że nie potrafisz rozpoznać, który komponent ma fokus.
Najprostsze rozwiązanie to wywołanie metody keyRelease z klasy Robot.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

no w sumie masz racje. A wiesz może jak to rozwiązać ?
Bo mógłbym w sumie zrobić chyba osobne dwa menu popup dla jednego JTextField i osobne dla drugiego ale tak bym nie chciał tego rozwiązać.

edytowany 1x, ostatnio: janiu
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

A jak ta funkcje użyć ? Na jakiej zasadzie ona działa ?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Chyba wiem, mogę spróbować napisać. Ale moim zdaniem, to jest bardzo nieprzyjazne dla użytkownika rozwiązanie. Musi oderwać rękę od klawiatury, chwycisz mysz, przesunąć kursor i kliknąć. A wystarczy nacisnąć Ctrl+V.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
GA
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
1

A może napisać własnego focusListenera i w metodzie focusGained zapamiętywać referencję na komponent, który nas interesuje?

JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0
bogdans napisał(a):

Chyba wiem, mogę spróbować napisać. Ale moim zdaniem, to jest bardzo nieprzyjazne dla użytkownika rozwiązanie. Musi oderwać rękę od klawiatury, chwycisz mysz, przesunąć kursor i kliknąć. A wystarczy nacisnąć Ctrl+V.

może i tak ale chce jak najbardziej zbliżyć ten program to takiego zwykłego windowsowskiego i ctrl+C i ctrl+V działają ale zawsze jest opcja ręcznego zaznaczanie jezeli użytkownik pracowałby na myszce i chce takie coś dodać

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Rozwiązanie z focusListenerem działa.

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

public class DwaPola extends JFrame implements ActionListener, FocusListener
{ 
    private JTextField first = new JTextField(16);
    private JTextField second = new JTextField(16);
    private JComponent last = null;
    public static void main(String[] args)
    {
        new DwaPola();
    }
    public DwaPola()
    {        
        setLayout(new FlowLayout(FlowLayout.CENTER));
        setTitle("Program");
        first.addFocusListener(this);        
        add(first);
        JButton b = new JButton("Wklej");
        b.addActionListener(this);
        add(b);
        second.addFocusListener(this); 
        add(second);
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);        
    }
    public void actionPerformed(ActionEvent ae)
    {
        if(last instanceof JTextField)
        {
            JTextField tf = (JTextField)last;
            tf.setText(tf.getText()+" a hoj");
        }
    }
    public void focusGained(FocusEvent fe)
    {
    }
    public void focusLost(FocusEvent fe)
    {
        last = (JComponent)(fe.getSource());
    }    
}

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Ok dzięki wielkie, ale mógłbyś mi wytłumaczyć co to jest "tf" dlaczego to tworzysz i jak to się dzieje że zawartosc tf jest potem w polach "first" lub "second" ?

To jest taki jakby "wskaźnik" na pole ostatnio odwiedzone przez kursor. Dobrze to rozumiem ?

edytowany 1x, ostatnio: janiu
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

W tym programie tak. Ogólnie last to referencja ( = jakby "wskaźnik") do ostatniego komponentu, który tracił fokus i do którego podpięto FocusListenera. Jeśli kursor jest w polu tekstowym, to to pole ma fokus. Gdy użytkownik klika w przycisk, to przenosi fokus na przycisk, zatem pole tekstowe traci fokus.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)