Kalkulator gui

0

Witam, napisalem kalkulator (funkcje + gui) wszystko ladnie dziala. Gui jest napisane z użyciem biblioteki awt. Po krotce program działa tak, że mamy po kolei przyciski 9,8,7 itp i po nacisnięciu przycisku trafia on do osobnej klasy z funkcjami i tam wlasnie sa wykonywane obliczenia a wyniki sa przedstawione na text fieldzie. Chcialbym zmienic wygląd i mam dla każdego przycisku jakiś wygląd w plikach jpg. Robie to tak :

Wcześniejsza wersja:

String[] labs = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3",
			"-", "0", ".", "=", "+", "C" };

Funkcja do dodawania action listenerow itp : 
for (int i = 0; i < labs.length; i++) {
			Button b = new Button(labs[i]);
			panel.add(b);
			b.addActionListener(this);

		}

Ustawienie layout:

setLayout(new BorderLayout());

		ramka.getContentPane().add(BorderLayout.CENTER, panel);
		ramka.getContentPane().add(BorderLayout.PAGE_START, wynik); // TextField z wynikiem

Co probowalem zrobic:

ImageIcon o4 = new ImageIcon("src/images/4.jpg", "4"); 
p4 = new JButton(o4); 
p4.setIcon(new ImageIcon("images/4.jpg"));
panel.add(p4);

Gdy próbowałem robić coś takiego przyciski zamieniały się w długie prostokąty z małymi obrazkami i mogłem ich dodać maksymalnie 5 (gridLayout(5,4) wiec odpowiadalo to liczbie rzedow). Po dodaniu wiekszej liczby wszystko znika. Jak to rozwiazac?
Chcialbym jak najmniej zmieniać kod i nie dodawać dodatkowych actionListenerow do każdego przycisku z osobna tylko ustawić np obrazek dla niego i jakąś liczbę jak go naciśniemy która trafia do ActionListenera i przekazywana jest do klasy z funkcjami.
Bardzo proszę o pomoc.

0

ok problem z widocznością rozwiązany. Teraz mam taki problem, najlepiej wytłumaczę to na jednym przykładzie:
Mam JButton z obrazkiem , chce aby po kliknięciu pojawiało się w textfieldzie (tam gdzie są wyniki itp) dana liczba np kliknę JButton odpowiadający liczbie 7 i chce żeby ta 7 pojawiła się w textfieldzie i trafiła do funkcji gdzie dalej już jest liczone. Czy muszę się bawić tak żeby każdy przycisk z osobna dodawać, dawać mu ActionListenera z nową klasą która ustawia text fielda, potem przerabiać go ze stringa na inta itp ? czy nie da się zrobić tego jakoś prościej i zaoszczędzić kupę linijek kodu ? Oto przykład:

p7 = new JButton();
		p7.setIcon(new ImageIcon("images/7.jpg", "7"));
		panel.add(p7);
		p7.addActionListener(new P7Listener());

Action Listener dla tego przycisku:

 public class P7Listener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			wynik.setText("7");  //Wynik to wlasnie nasz textField w ktorym sa wyświetlane aktualne kliknięcia/ wyniki 
		}
		
0

Cyfry można oprogramować tak:

ActionListener al = new Listener();
for(int i=0;i<10;i++)
{
    String s = ""+i;
    JButton b = new JButton();
    b.setIcon(new ImageIcon("images/"+s+".jpg",s));
    b.setActionCommand(s);
    panel.add(b);
    b.addActionListener(al);
}

 public class Listener implements ActionListener{
 
                @Override
                public void actionPerformed(ActionEvent arg0) {
                        // TODO Auto-generated method stub
                        wynik.setText(wynik.getText()+arg0.getActionCommand());  //Wynik to wlasnie nasz textField w ktorym sa wyświetlane aktualne kliknięcia/ wyniki 
                }
}
0

IMO we współczesnych kalkulatorach nie ma sensu wyklikiwanie cyfr... Lepiej zrobić pole edycji + listę funkcji (sin, tan itd.) oraz do tego parser i validator, klawisz enter będzie zatwierdzał wprowadzone zwalidowane wyrażenie i tyle ;).

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