Czasami widoczne czasami nie, JFrame i pochodne

0

Witam.

Raczkuje w tematyce Javy. Generalnie ucze sie od 2 dni i powiłem wlasna pierwsza mini aplikacje: Kalkulator. Mam jednak problem gdyz pola kalkulatora sa nie widoczne. dopiero po zaznaczzeniu ich np. ( tab-em) staja sie widoczne.

Wiecej pewnie rozjasni sie po wklejeniu kodu

<code-java> import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*;

public class Kalkulator extends JFrame implements ActionListener
{
JLabel label1, label2;
JButton plus,minus,razy,podziel,ce,koniec;
JTextField pole1,pole2,pole3;
Font czcionka1;

public Kalkulator()
{
super("Kalkulator by JR");
setSize(200,290);
setVisible(true);
Container kontener = getContentPane();
kontener.setBackground(Color.white);
kontener.setLayout(null);
czcionka1 = new Font("Arial",Font.BOLD,16);

label1 = new JLabel("suma:");
label1.setFont(czcionka1);
label1.setBounds(20,55,100,20);
kontener.add(label1);

label2 = new JLabel("");
label2.setBounds(55,55,80,20);
kontener.add(label2);

pole2 = new JTextField();
pole2.setBounds(55,110,100,30);
kontener.add(pole2);

pole1 = new JTextField("0");
pole1.setBounds(55,50,100,30);
kontener.add(pole1);

plus = new JButton("+");
plus.setFont(czcionka1);
plus.setBounds(2,150,42,42);
kontener.add(plus);
plus.addActionListener(this);

minus = new JButton("-");
minus.setBounds(45,150,42,42);                                                                    
minus.setFont(czcionka1);
kontener.add(minus);
minus.addActionListener(this);

razy = new JButton("*");
razy.setBounds(98,150,42,42);                                                                    
razy.setFont(czcionka1);
kontener.add(razy);
razy.addActionListener(this);

podziel = new JButton("/");
podziel.setBounds(141,150,42,42);                                                                    
podziel.setFont(czcionka1);
kontener.add(podziel);
podziel.addActionListener(this);

ce = new JButton("CE");
ce.setBounds(80,220,40,20);
kontener.add(ce);
ce.addActionListener(this);

koniec = new JButton("koniec");
koniec.setBounds(110,220,60,40);
kontener.add(koniec);
koniec.addActionListener(this);

}

public void dodaj() {

String pierwsza = pole2.getText();
double jeden = Double.parseDouble(pierwsza);

String druga = pole1.getText();
double dwa = Double.parseDouble(druga);
double wynik = jeden + dwa;
String wynik2 = String.valueOf(wynik);
pole1.setText(wynik2);
pole2.setText("");

}
public void ce() {
pole1.setText("");
pole2.setText("");
}
public void razy() {
String pierwsza = pole2.getText();
String druga = pole1.getText();
double jeden = Double.parseDouble(pierwsza);
double dwa = Double.parseDouble(druga);
double wynik = jeden * dwa;
String wynik2 = String.valueOf(wynik);
pole1.setText(wynik2);
pole2.setText("");
}

public void podziel() {
String pierwsza = pole1.getText();
String druga = pole2.getText();
double jeden = Double.parseDouble(pierwsza);
double dwa = Double.parseDouble(druga);
double wynik = jeden / dwa;
String wynik2 = String.valueOf(wynik);
pole1.setText(wynik2);
pole2.setText("");
}

public void minus () {
String pierwsza = pole1.getText();
String druga = pole2.getText();
double jeden = Double.parseDouble(pierwsza);
double dwa = Double.parseDouble(druga);
double wynik = jeden - dwa;
String wynik2 = String.valueOf(wynik);
pole1.setText(wynik2);
pole2.setText("");

}

public void koniec() {
System.exit(1);
}

public void actionPerformed(ActionEvent e)
{
if (e.getSource() == plus)
{
dodaj();
}

else if (e.getSource()== minus)
{
	minus();
}
	else if (e.getSource()== razy)
{
	razy();
}
	else if (e.getSource()== podziel)
{
	podziel();
}
	else if (e.getSource() == ce)
	{
		ce();
	}
	else if (e.getSource() == koniec) 
	{
		koniec();
	}

}

public static void main(String args[])
{
new Kalkulator();
}

}


Gdy uruchomia aplikacja wyglada tak:
![user image](http://przepisuj.waw.pl/kalk0.JPG)
lub tak :
![user image](http://przepisuj.waw.pl/kalk01.JPG)

po aktywowaniu (kliknieciu) na niewidoczne pola tekstowe:

![user image](http://przepisuj.waw.pl/kalk1.JPG)

i po przejechaniu myszka nad buttonami:

![user image](http://przepisuj.waw.pl/kalk3.JPG)


Cemu tak sie dzieje? Jak ustawic aby wszystkie elementy byly widoczne?

Dodatkowo ma jeszcze 2 pytania:
-jak zrobic aby tekst na przycisku zajmowal cala mozliwa powierzchnie (zlikwidowac ewnetrzne marginesy?)---zamiast "..." na pierwszym przycisku powinien wyswietlac sie "+" ale widac nie miesci sie  :/

-jak ustawic aby pole1 bylo polem nie aktywnym?

Wiem ze rozwiazanie znajde w manualu ale jeszcze nie do konca opanowalm poruszanie sie po nim.
0

Poczytaj jednak manual.
Cytując kod zamknij go w znaczniki < code=java> < /code> (bez odstępów)

  1. Rozmieszczeniem elementów na JFrame zajmuje sie tzw. menedżer rozkładu (domyślnie jest to BorderLayout), ty chcesz rozmieszczać ręcznie (metody setBounds(...), musisz zatem wyłączyć menedżera
setLayout(null);
pole1.setEditable(false);
  1. dodaj (w konstruktorze)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

bez tego zamknięcie głównego okna programu nie zakończy wykonywania programu.
4. zrób większe przyciski setBounds() ustala położenie i rozmiar komponentu
pozdrawiam

0
  1. Jak już używasz layout managera to musisz nadpisać metody getMinimumSize(), getPreferredSize() i getMaximumSize() dla wszystkich własnych komponentów (własnych klas). Inaczej LM będzie się gubił i nie będzie wyświetlał tego co potrzeba.

@bogdans, ja będę mordował za punkt 1. ;) LM są do tego by ułatwiać życie, a nie by je wyłączać.

0

@Koziołek, w swoich programach zawsze używam LM, napisałem nawet własny bo dla pewnych potrzeb żaden biblioteczny nie spełniał wymagań. Ale tłumaczenie początkującemu jakich LM ma użyć by uzyskać, to co chciał przy pomocy setBounds(..) mnie przerosło.
pozdrawiam

0

@bogdans, tru. Zresztą chyba trzeba będzie się wziąć i napisać tutki do poszczególnych layoutów na 4programmers. SUNowskie są fajne, ale można je udoskonalić.

0

Dzieki za odpowiedzi :)
Czytam manual ale tak jak napisalem jeszcze sie troche gubie w srodowisku javy i nie do konca potrafie wykorzystac jego zasoby. Tak myslalem ze bede musial uzyc menadzerow rozkladu, myslalem ze da sie to zalatwic jakos bardziej intuicyjnie.
Zaraz postudiuje wasze podpowiedzi i gdyby mial jeszcze jakis problem to sie zglosze.

Ps.

Pozno juz bylo i zamiast < code = java > uzylem < code - java > za co serdecznie przepraszam ;-P

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