pole tekstowe w nowym oknie

0

Witam,

mam następujący kod:

import javax.swing.JTextField;
public class NazwaMojejKlasy extends Frame implements WindowListener, ActionListener, MouseListener  {
    public NazwaMojejKlasy() {
        super("Aplikacja");
        addMouseListener(this);
        addWindowListener(this);
        setSize(330, 195);
        setVisible(true);

        //pozycje menu
        MenuBar menuBar = new MenuBar();
        setMenuBar(menuBar);
        Menu menu = new Menu("Plik");
        menu.add(new MenuItem("Pozycja menu"));
        menu.addActionListener(this);
        menuBar.add(menu);
        
        //dodaj pola tekstowe
        JTextField pole=new JTextField(20);
        pole.setEditable(true);
    }

Dodałem fragment o polach tekstowych na podstawie http://forum.pclab.pl/topic/712983-Java-Pole-tekstowe/

W jaki sposób mogę umiejscowić to pole tekstowe w konkretnym miejscu formatki? Nie mam żadnego pliku z graficzną reprezentacją pól tekstowych, po prostu sam kod w NetBeansie, który wyświetla mi prostą formatkę z menu, chciałbym dodać kilka labeli i pól tekstowych, może też ewentualnie przycisk.

Większość porad, jakie znajduję, dotyczy javascriptu (a nie javy) albo midletów na komórki.

Pozdrawiam!

1

Jak chcesz rozmieszczać komponenty, to wpierw wyłącz menadżera rozkładu.

setLayout(null):
...
pole.setBounds(new Dimension(x,y,width,height));

Polecenie

pole.setEditable(true);

jest zbyteczne, pola tekstowe po skonstruowaniu są edytowalne.

1

A dodajesz to pole do okna? Spróbuj getContentPane().add(poleTekstowe).

EDIT: Nie zauważyłem, że rozszerzasz Frame, a nie JFrame. W takim razie po prostu add(poleTekstowe).

0

Dzięki za odpowiedzi,

        //dodaj pola tekstowe i labele do głównego okna
        setLayout(null); //włączenie menadżera rozkładu
        //dodawanie pól tekstowych
        JTextField pole=new JTextField(20);
        int x = 10; int y = 10; int width = 50; int height = 20;
        getContentPane().add(pole); //pierwsza z prób (linia nr 1)
        //pole.setBounds(new Dimension(x,y,width,height));  //druga z prób (linia nr 2)

Jeśli odkomentowana jest linia nr 1 to dowiaduję się, że nie może znaleźć symbolu i sugeruje mi jego utworzenie (i tak bym musiał to zaimplementować, co IDE dodałby). Jeśli odkomentowana jest druga linia (pierwsza zakomentowana) to dowiaduję się, że nie ma odpowiedniego konstruktora dla Dimension(int,int,int,int).

Z tego (import javax.swing.JTextField;) korzystam, bo tak mi zasugerował NetBeans IDE.

Pozdrawiam!

1

Wiersz 2, to moja pomyłka.

pole.setBounds(x,y,width,height);

A jeśli chodzi o wiersz 1, to jakiego symbolu nie ma?

0

Dzięki za odpowiedź!

Czyli drugą linijkę zmieniłem na:

pole.setBounds(x,y,width,height);

Natomiast błąd dotyczący pierwszej:

cannot find symbol
  symbol: method getContentPane()
  location: class NazwaMojejKlasy

Teraz korzystam z tej zmienionej linii drugiej i nie ma błędów kompilacji, ale jednocześnie nic się i tak nie wyświetla na formatce.

Znalazłem też coś takiego (http://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html => http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TextDemoProject/src/components/TextDemo.java), ale to mi wcale na prosty sposób nie wygląda - trzeba dodać dużo kodu do konstruktora, stworzyć actionPerformed oraz w nie całkiem dla mnie jasny sposób wykorzystać w mainie.

Pozdrawiam!

PS Sprawdzę za moment to, o czym napisałeś w Twoim post scriptum. Za chwilę dam znać na forum, co wyszło :).

==============================================

OK, mam taki kod:

        import javax.swing.JTextField; //nie mogę zmienić z JTextField na TextField, bo nie ma czegoś takiego

        //...

        //dodaj pola tekstowe i labele do głównego okna
        setLayout(null); //włączenie menadżera rozkładu
        //dodawanie pól tekstowych
        TextField pole=new TextField(20);
        int x = 10; int y = 10; int width = 50; int height = 20;
        add(pole); //linia nr 1
        pole.setBounds(x,y,width,height); //linia nr 2

        setVisible(true);

brak błędów przy uruchamianiu, ale też brak rezultatu, czyli pola tekstowego.

Pozdrawiam!

1

Co do tej linijki:
import javax.swing.JTextField; //nie mogę zmienić z JTextField na TextField, bo nie ma czegoś takiego
TextFiled nie należy do Swing-a, tylko do AWT, więc nie powinieneś zmieniać na
import javax.TextField
tylko na:
java.awt.TextField

0

Dzięki!

import java.awt.TextField;

//...

public class NazwaMojejKlasy extends Frame implements WindowListener, ActionListener, MouseListener {

//...

    public NazwaMojejKlasy() {
        super("Test...");

        //...

        //dodaj pola tekstowe i labele do głównego okna
        setLayout(null); //włączenie menadżera rozkładu
        //dodawanie pól tekstowych
        TextField pole=new TextField(20);
        int x = 10; int y = 10; int width = 50; int height = 20;
        add(pole);
        pole.setBounds(x,y,width,height);

        setVisible(true);
    }

No cóż, dalej szukam, gdzie mógł się ukryć błąd... Program się uruchamia, ale pola brak.

Pozdrawiam!

PS Próbowałem znów opcji z JTextField, ale "cannot find symbol: symbol: method getContentPane()", zaś nie wydaje mi się, żeby konieczne było jej implementowanie przeze nie, raczej gdzieś wcześniej błąd się ukrył.

===============

Rozwiązałem to w taki sposób:

    import javax.swing.JFrame; //potrzebna była zarówno ta...
    import javax.swing.JTextField; //...jak i ta linijka
    //...
    public class NazwaMojejKlasy extends JFrame

1 użytkowników online, w tym zalogowanych: 0, gości: 1