Podstawy GUI w Swingu

Podstawy GUI w Swingu
0

Witam chce zrobić gui według tego tutka ale on chyba jest za stary i nieaktualny. Chce wstawić JLabel i niemoge tak samo z JTextFild i nieche mi działać, Co robię złe ?

Kopiuj
import javax.swing.*;
public class CalFan2 extends JFrame
{
	
	
	public CalFan2() 
	{
		JTextFild tCal, tFan;
		
		setSize(400,200);
		setTitle("Przeliczanie stopni");
		
		tCal = new JTextField("");
		tCal.setBounds(170,20,150,20);
		add(tCal)
		
		
	}
 

	
    public static void main(String[] args) 
    {
    	CalFan apka = new CalFan();
    	apka.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    	apka.setVisible(true);
	}
}
edytowany 1x, ostatnio: bogdans
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Zdefiniuj "nie chce mi działać".


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

Masz jeszcze raz kod

1

Kopiuj
import javax.swing.*;


public class CalFan2 extends JFrame
{
	
	
	public CalFan2() 
	{
		JTextFild tCal, tFan;
		
		setSize(400,200);
		setTitle("Przeliczanie stopni");
		
		tCal = new JTextField("");
		tCal.setBounds(170,20,150,20);
		add(tCal)
		
		
	}
 

	
    public static void main(String[] args) 
    {
    	CalFan apka = new CalFan();
    	apka.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    	apka.setVisible(true);
	}
//30}

Dodałem teraz 1-30 abyś wiedział ile jest linijek bez liczenia a tu błąd
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Access restriction: The type JFrame is not accessible due to restriction on required library C:\Program Files\Java\jre8\lib\rt.jar
JTextFild cannot be resolved to a type
Access restriction: The constructor JTextField(String) is not accessible due to restriction on required library C:\Program Files\Java\jre8\lib\rt.jar
Access restriction: The type JTextField is not accessible due to restriction on required library C:\Program Files\Java\jre8\lib\rt.jar
Syntax error, insert ";" to complete Statement
Access restriction: The method setDefaultCloseOperation(int) from the type JFrame is not accessible due to restriction on required library C:\Program Files\Java\jre8\lib\rt.jar
Access restriction: The type WindowConstants is not accessible due to restriction on required library C:\Program Files\Java\jre8\lib\rt.jar
Access restriction: The field EXIT_ON_CLOSE from the type WindowConstants is not accessible due to restriction on required library C:\Program Files\Java\jre8\lib\rt.jar

at CalFan2.<init>(CalFan2.java:4)
at CalFan2.main(CalFan2.java:26)
edytowany 1x, ostatnio: bogdans
C1
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 7 lat
  • Postów:72
0

JTextField a nie JTextFild....

0

Nie pomogło
tu chyba krwi błąd
public class CalFan2 extends JFrame
i tu CalFan2 apka = new CalFan2();

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Błąd wygląda tak jakbyś do tego projektu dołączył jednocześnie więcej niż jedno jdk, w różnych wersjach. Zgaduje ze to eclipse tak zaćpał. Wywal z build path JRE/JDK i dodaj jeszcze raz. Ewentualnie importuj potrzebne klasy explicite a nie za pomocą *


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

Może pomyśl nad: http://www.jetbrains.com/idea/
sam importuje takie proste rzeczy,k których potrzeba


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
bogdans
Eclipse też importuje co trzeba.
KA
a no to sry
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Masz kilka literówek. Tu masz działający kod:

Kopiuj
import javax.swing.*;

public class CalFan2 extends JFrame {

    public CalFan2() 
    {
        JTextField tCal, tFan;
 
        setSize(400,200);
        setLayout(null); //dopisałem - bogdans
        setTitle("Przeliczanie stopni");
 
        tCal = new JTextField("");
        tCal.setBounds(170,20,150,20);
        add(tCal);
    }
 
    public static void main(String[] args) 
    {
        CalFan2 apka = new CalFan2();
        apka.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        apka.setVisible(true);
    }
}
edytowany 1x, ostatnio: bogdans
bogdans
Jak dajesz kod, to dawaj porządny. Rozmieszczanie ręczne (setBounds) nijak nie pasuje do włączonego menadżera rozkładu. Uzupełniłem Twój kod.
bakeraw2
Ok, ja tylko poprawiłem kod tak aby się uruchamiał. Zaraz dodam prawidłowo napisany.
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Poprawiony kod:

Kopiuj
import java.awt.FlowLayout;

import javax.swing.*;

public class CalFanFrame extends JFrame {
	 public static final int WIDTH = 400;
	 public static final int HEIGHT = 200;
	 
	 public CalFanFrame()  {
		 setUpFrame();
		 initializeComponents();
	 }
	 
	 private void setUpFrame() {
	     setSize(WIDTH, HEIGHT);
	     setLayout(new FlowLayout());
	     setTitle("Przeliczanie stopni");
	 }
	 
	 private void initializeComponents() {
	     JTextField tCal = new JTextField("Pole tekstowe");
	     add(tCal);
	 }
}

// *******************************************************************

import java.awt.EventQueue;

import javax.swing.WindowConstants;

public class Runner {
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				CalFanFrame apka = new CalFanFrame();
			    apka.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
			    apka.setVisible(true);
			}
		});
	}
}

0

Ten 2 kod to jest do czego ?
A ten setLayout(null); pisałem pod tytułem wcześniej i to chyba byłą tego wina

bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Drugi kod jest kodem poprawionym i napisanym w bardziej prawidłowy sposób. Tak jak napisał bogdans, możesz używać setBounds jeśli ustawisz layout na null.
Poczytaj sobie o zarządcach układu w swingu:

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
lub
http://javastart.pl/grafika_awt_swing/zarzadzanie_rozkladem/

edytowany 1x, ostatnio: bakeraw2
0

To mam jeszcze 1 problem nie wiem gdzie ma błąd w kodzie (już szukałem 1h i nie mogę znaleźć) oraz jak byś mógł to poprawić to w prawidłowy sposób (bo robie tak ja na filmie a mam 14lat i dopiero 2 dni się tym bawię)

Kopiuj
 import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
 
public class Test2 extends JFrame implements ActionListener implements KeyListener
{
	 JTextField tCal, tFan;
	 JLabel lCal, lFan;
	 JButton bKon;
	 double tempCal, tempFan;
	 JCheckBox chWielkie; 
    
    public Test2() 
    {
        setSize(400,200);
        setLayout(null); 
        setTitle("Przeliczanie stopni");
        
        lCal = new JLabel("Stopnie Celsiusza");
        lCal.setBounds(20,20,150,20);
        add(lCal);
        
        lFan = new JLabel("Stopnie Fahrenheita");
        lFan.setBounds(20,80,150,20);
        add(lFan);
 
        tCal = new JTextField("32");
        tCal.setBounds(170,20,150,20);
        add(tCal);
        tCal.addActionListener(this);
        
        tFan = new JTextField("");
        tFan.setBounds(170,80,150,20);
        add(tFan);
        
        bKon = new JButton("Konwertuj");
        bKon.setBounds(100,120,150,20);
        add(bKon);
        bKon.addActionListener(this);
        
        chWielkie = new JCheckBox ("Wielkie litery");
        chWielkie.setBounds(250,120,150,20);
        add(chWielkie);
        chWielkie.addActionListener(this);
        
    }
    
    public void actionPerformed(ActionEvent e) 
    {
    	Object zrodlo = e.getSource();
    	if (zrodlo==bKon || zrodlo==tCal)
    	{
		tempCal = Double.parseDouble(tCal.getText());
		tempFan = 32.0 + (9.0/5.0) * tempCal;
		tFan.setText(String.valueOf(tempFan));
    	}
    	else if (zrodlo==chWielkie)
    	{
    		if (chWielkie.isSelected()==true)
    		{
    			tFan.setFont(new Font("SandSerif", Font.BOLD, 18));
    		}
    		else
    		{
    			tFan.setFont(new Font("SandSerif", Font.PLAIN, 12));
    		}
    	}
	}



	public static void main(String[] args) 
    {
        Test2 apka = new Test2();
        apka.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        apka.setVisible(true);
    }
}
edytowany 1x, ostatnio: bogdans
KA
ogarnij sobie jakieś sensowne IDE
0

A w tym polskim tutku jest ten szyk który ja stosuje xD

bakeraw2
to chyba musisz zmienić "tutki"
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Kompilator nie podpowiada co to za błąd oraz w której lini? Jeśli chcesz żeby klasa implementowała więcej niż jeden interfejs to podawaj je po przecinku.

Błąd miałeś w lini:

Kopiuj
public class Test2 extends JFrame implements ActionListener implements KeyListener

Powinno być

Kopiuj
public class Test2 extends JFrame implements ActionListener
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@martiner32 czy ty programujesz lodówką czy mikrofalówką? Przecież dowolne sensowne IDE (IntelliJ, Eclipse czy Netbeans) od kopa rozwiązuje takie problemy...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Brakuje Ci importów. Wstaw na górze:

Kopiuj
import javax.swing.*;

Zawsze możesz kliknąć na ikonkę która znajduje się po lewej stronie w lini w której jest błąd.

bogdans
Zazwyczaj nie wiadomo co importować, instrukcje importu powinno wpisać IDE. Spójrz na post poniżej.
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Kliknij Source => Organize imports.


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
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Albo zacznij używać IntelliJ IDEA- tam wszystko jest prostsze.
Poza tym poczytaj sobie o Layoutach w Swingu, ponieważ ręczne określanie położenia i wielkości chociażby JTextFieldów nie jest dobre.
Co jeśli miałbyś napisać, np kalkulator? Położenia i wielkoścci przyciksów określałbyś ręcznie?

0

A ja mam jeszcze takie jedno proste pytanie jeżeli chce dać coś w indexie górnym to co mam wpisać ? sup.0 ?

Na skrinie jest cały kod poprawiony który działa xD tylko się wszystko nie zmieściło, a chciałem pokazać, że nie mogę się łatwo zorientować gdzie jest błąd

A organizacja importów tylko pogorszyło sprawę
https://www.dropbox.com/s/bqpldqfjsyvetpj/Zrzut%20ekranu%202014-04-25%2011.07.32.png

bakeraw2
Wklej tutaj kod lub logi z IDE to ktoś to sprawdzi.
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

jak to ma być jakiś tekst na na elemencie graficznym to używasz w nim html'u.
Np:

Kopiuj
<html>zwykły tekst <sup>gorny indeks</sup></html>

A tu dowiesz się więcej o tym jak używać htmlu w swingu:

http://docs.oracle.com/javase/tutorial/uiswing/components/html.html

0

Dobra thx pobrałem ten program co polecałeś Ty i Karolina i zobaczymy

bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Tu masz szybki filmik jak uruchomić program w IntelliJ IDEA:

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

@bakeraw2, zgadzam się co layoutów. Ręczne rozmieszczanie komponentów powinno stosować się bardzo wyjątkowo. Np. uzyskanie poniższego wyglądu z użyciem layoutów wymaga (tak mi się przynajmniej wydaje) umieszczenia w oknie 90 pustych obiektów typu JLabel. Lepiej chyba rozmieścić przyciski ręcznie i zablokować możliwość zmiany rozmiaru okna (setResizable(false);).


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
bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

Zamiast dodawać 90 pustych obiektów typu JLabel można utworzyć raz obiekt JLabel i dodać do 90 razy do panelu.

0

I mam kolejne pytanie czemu mi to nie działa
tFan.setText(String.valueOf(tempFan + "<html> F 0 </html>"));
i można jakoś zablokować rozciąganie okienka ?

bakeraw2
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 5 lat
  • Postów:400
0

String.valueOf() służy do czegoś innego. Powinieneś użyć:

Kopiuj
JLabel textField = new JLabel();
textField.setText("<html>20<sup>o</sup></html>");
add(textField);
edytowany 1x, ostatnio: bakeraw2
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

@bakeraw2, na jedno wychodzi muszą być różne obiekty.
@martiner32, przecież pisałem

Kopiuj
setResizable(false));

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans
bakeraw2
@bogdans, To samo ale o 89 obiektów mniej ;) Można jeszcze jakość kombinować z GridLayoutem ale na szybko nic nie potrafię wymyśleć
bogdans
Sprawdziłem, musi być 90 różnych obiektów.
bakeraw2
Ok pomyślałem, że można raz utworzyć i dodawać.
0

A i chce jeszcze to zatwierdza enterem ale nie wiem jak.

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

Nie zaciekawiło cię, że kody wstawiane przez inne osoby są pokolorowane? Podpowiedź: umieszczaj kod w znacznikach <tt>
< code=java>

Kopiuj
</tt> (bez spacji!). Na razie kosz za nieczytelny kod.

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
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)