Rozbudowanie programu do obliczania BMI

Rozbudowanie programu do obliczania BMI
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
1

@Adii69 to jest mała aplikacja, więc jest średnim przykładem. Normalnie to implementujesz sobie logikę i widokowi wystawiasz np. jakiś serwis
BMIService z metodą count, która rzuca wyjątki walidacji. Jak poznasz podstawy to poczytaj o wzorcach projektowych.


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!
A6
To na razie zostańmy przy tym przykładzie :P
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Dlaczego w bloku try po lewej stronie przypisania są tWiek, tWaga i tWzrost? Jest oczywiste, że powinny być wiek, waga i wzrost.

Kopiuj
               int wiek = 0;
               double wzrost = 0.0;
               double waga = 0.0;
               boolean ok = true;
               try
               {
                   tWiek = Integer.parseInt(tWiek.getText().trim());
                   tWaga = Double.parseDouble(tWaga.getText());
                   tWzrost = Double.parseDouble(tWzrost.getText());
               }

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
cholera nie mam już pomysłów
A6
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:24
0
Kopiuj
	           {
	               wiek = Integer.parseInt(tWiek.getText().trim());
	               waga = Double.parseDouble(tWaga.getText());
	               wzrost = Double.parseDouble(tWzrost.getText());
	           }

Przy tych 3 mam taki błąd:

Kopiuj
Multiple markers at this line: - Cannot invoke getText() on the primitive type int - wiek cannot be resolved to a variable

dodanie znacznika <code class="none"> - @furious programming

edytowany 1x, ostatnio: flowCRANE
flowCRANE
Treść błędów wstawiaj w znaczniki &lt;code=none&gt;
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Tutaj

Kopiuj
public class menuGlowne extends JFrame implements ActionListener
{
    private JTextField tImie, tWiek, tWzrost, tWaga, tWynik;

zdefiniowałeś pola tWiek,tWaga i tWzrost typu JTextField. Z komunikatu błędu wynika, że zdefiniowałeś też zmienne lokalne typu int o takich samych nazwach. A zmienne lokalne przesłaniają pola.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
Poprawione, dziękuję
A6
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:24
0
Kopiuj
package rozbudowaneBMI;
import javax.swing.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class menuGlowne extends JFrame implements ActionListener
{
	private JTextField tImie, tWiek, tWzrost, tWaga, tWynik;
	private JLabel lImie, lWiek, lWzrost, lWaga, lWynik, lCm, lKg, loutput;
	private JButton bWyjście, bOblicz;
	private JTextArea output = new JTextArea(6,30);
	
	
	public menuGlowne()
	{
		setSize(800,500);
		setTitle("Kalkulator indeksu BMI");
		setLayout(null);
		
		lImie = new JLabel("Podaj swoje imię", JLabel.RIGHT);
		lImie.setBounds(30, 60, 100, 50);
		tImie = new JTextField();
		tImie.setBounds(200, 70, 150, 30);
			
		lWiek = new JLabel("Podaj swój wiek ", JLabel.RIGHT);
		lWiek.setBounds(30, 110, 100, 50);
		tWiek = new JTextField();
		tWiek.setBounds(200, 120, 150, 30);
		
		lWzrost = new JLabel("Podaj swój wzrost    ", JLabel.RIGHT);
		lWzrost.setBounds(30, 160, 120, 50);
		tWzrost = new JTextField();
		tWzrost.setBounds(200, 170, 150, 30);
		
		lWaga = new JLabel("Podaj swoją wagę    ", JLabel.RIGHT);
		lWaga.setBounds(30, 220, 120, 50);
		tWaga = new JTextField();
		tWaga.setBounds(200, 230, 150, 30);
		
		
		loutput = new JLabel("Wynik:", JLabel.RIGHT);
		loutput.setBounds(339, 10, 100, 100);
		output = new JTextArea();
		output.setEditable(false);
		output.setBounds(400, 80, 300, 200);
		
		
		lCm = new JLabel("cm", JLabel.RIGHT);
		lCm.setBounds(30, 160, 340, 50);
		lKg = new JLabel("kg", JLabel.RIGHT);
		lKg.setBounds(30, 220, 336, 50);
		
		
		add(lImie);
		add(tImie);
		add(tWiek);
		add(lWiek);
		add(tWzrost);
		add(lWzrost);
		add(lCm);
		add(lKg);
		add(lWaga);
		add(tWaga);
		add(output);
		add(loutput);
	
		bOblicz = new JButton("Oblicz BMI");
		bOblicz.setBounds(250, 300, 100, 50);
		bOblicz.addActionListener(this);
		
		bWyjście = new JButton("Wyjście z programu");
		bWyjście.setBounds(550, 380, 200, 60);
		bWyjście.addActionListener(this);
		
		
		add(bOblicz);
		add(bWyjście);
		
	}

	@Override
	public void actionPerformed(ActionEvent e) 
	{
		Object źródło = e.getSource();
		if (źródło==bWyjście)
		{
			dispose();
		}
		else if (źródło==bOblicz)
		{
			
		
		}
	}
	
	
	
	public static void main(String[] args) 
	
	{
	
		menuGlowne app = new menuGlowne();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		app.setVisible(true);          	   	
		
	}
	
	class Liczydlo implements ActionListener
	   {
	       public void actionPerformed(ActionEvent ae)
	       {
	           output.setText("");
	           String answer = "";
	           int wiek = 0;
	           double wzrost = 0.0;
	           double waga = 0.0;
	           boolean ok = true;
	           try
	           {
	               wiek = Integer.parseInt(tWiek.getText().trim());
	               waga = Double.parseDouble(tWaga.getText());
	               wzrost = Double.parseDouble(tWzrost.getText());
	           }
	           catch(Exception e)
	           {
	               ok = false;
	           }
	           if(ok)
	           {
	               double bmi = (waga/Math.pow(wzrost/100,2));
	               output.setText("Twój indeks BMI = "+bmi);
	           }
	           else
	           {
	               output.setText(tImie.getText()+" głupoty piszesz");
	           }
	       }
	   }       
	}

stanąłem w tym miejscu, wszystko niby się zgadza ale jak teraz zrobić żeby po przyciśnięciu przycisku program wykonał obliczenie BMI?

próbowałem coś tutaj działać ale nic nie wychodziło

Kopiuj
		else if (źródło==bOblicz)
		{
			
		
		}
	}
edytowany 3x, ostatnio: flowCRANE
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Jeśli masz tak:

Kopiuj
bOblicz.addActionListener(this);

to klasa Liczydlo jest zbyteczna, przepisz kod jej metody actionPerformed

Kopiuj
        else if (źródło==bOblicz)
        {
                // <- tu
 
        }

Możesz też zrobić tak jak jest w moim kodzie

Kopiuj
bOblicz.addActionListener(new Liczydlo());

wtedy fragment

Kopiuj
        else if (źródło==bOblicz)
        {
 
 
        }

jest niepotrzebny.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
Dzięki wielkie ;) Teraz muszę pobawić się z tekstem
A6
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:24
0

Tak wygląda póki co programik:

user image

a oto kod:

Kopiuj
package rozbudowaneBMI;
import javax.swing.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class menuGlowne extends JFrame implements ActionListener
{
	private JTextField tImie, tWiek, tWzrost, tWaga, tWynik;
	private JLabel lImie, lWiek, lWzrost, lWaga, lWynik, lCm, lKg, loutput, lInfo;
	private JButton bWyjście, bOblicz ,bNorma;
	private JTextArea output = new JTextArea(6,30);
	
	
	public menuGlowne()
	{
		setSize(800,500);
		setTitle("Kalkulator indeksu BMI");
		setLayout(null);
		
		lImie = new JLabel("Podaj swoje imię:", JLabel.RIGHT);
		lImie.setBounds(30, 60, 100, 50);
		tImie = new JTextField();
		tImie.setBounds(200, 70, 150, 30);
			
		lWiek = new JLabel("Podaj swój wiek: ", JLabel.RIGHT);
		lWiek.setBounds(30, 110, 100, 50);
		tWiek = new JTextField();
		tWiek.setBounds(200, 120, 150, 30);
		
		lWzrost = new JLabel("Podaj swój wzrost:    ", JLabel.RIGHT);
		lWzrost.setBounds(30, 160, 120, 50);
		tWzrost = new JTextField();
		tWzrost.setBounds(200, 170, 150, 30);
		
		lWaga = new JLabel("Podaj swoją wagę:    ", JLabel.RIGHT);
		lWaga.setBounds(30, 220, 120, 50);
		tWaga = new JTextField();
		tWaga.setBounds(200, 230, 150, 30);
		
		
		loutput = new JLabel("Wynik:", JLabel.RIGHT);
		loutput.setBounds(339, 10, 100, 100);
		output = new JTextArea();
		output.setEditable(false);
		output.setBounds(400, 80, 300, 200);
		
		lInfo = new JLabel("Kalkulator BMI v1.1", JLabel.HEIGHT);
		lInfo.setBounds(650, 400, 130, 100);
		
		
		lCm = new JLabel("cm", JLabel.RIGHT);
		lCm.setBounds(30, 160, 340, 50);
		lKg = new JLabel("kg", JLabel.RIGHT);
		lKg.setBounds(30, 220, 336, 50);
		
		
		
		
		add(lImie);
		add(tImie);
		add(tWiek);
		add(lWiek);
		add(tWzrost);
		add(lWzrost);
		add(lCm);
		add(lKg);
		add(lWaga);
		add(tWaga);
		add(output);
		add(loutput);
		add(lInfo);
		
		
	
		bOblicz = new JButton("Oblicz BMI");
		bOblicz.setBounds(250, 300, 100, 50);
		bOblicz.addActionListener(this);
		
		bWyjście = new JButton("Wyjście z programu");
		bWyjście.setBounds(550, 380, 200, 60);
		bWyjście.addActionListener(this);
		
		bNorma = new JButton("Podaj normę");
		bNorma.setBounds(250, 360, 150, 50);
		bNorma.addActionListener(this);
				
		
		
		add(bOblicz);
		add(bWyjście);
		add(bNorma);
		
		
	}

	@Override
	public void actionPerformed(ActionEvent e) 
	{
		Object źródło = e.getSource();
		if (źródło==bWyjście)
		{
			dispose();
		}
		else if (źródło==bOblicz)
		{
			bOblicz.addActionListener(new Liczydlo());	
		}
		else if (źródło==bNorma)
		{
			output.setText("Indeks BMI powinień oscylować w \nprzedziale od 18 do 25 punktów. \n \n Wynik poniżej 18 punktów oznacza niedowagę. "
					+ "\n Wynik powyżej 25 punktów oznacza nadwagę."
					+ "\n \n Jeżeli wynik znacznie odbiega od normy, \n należy jak najszybciej skontaktować się z lekarzem.");
		}
	}
	
	public static void main(String[] args) 
	
	{
	
		menuGlowne app = new menuGlowne();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		app.setVisible(true);          	   			 
		
	}
	
	class Liczydlo implements ActionListener
	   {
	       public void actionPerformed(ActionEvent ae)
	       {
	           output.setText("");
	           String answer = "";
	           int wiek = 0;
	           double wzrost = 0.0;
	           double waga = 0.0;
	           boolean ok = true;
	           try
	           {
	               wiek = Integer.parseInt(tWiek.getText().trim());
	               waga = Double.parseDouble(tWaga.getText());
	               wzrost = Double.parseDouble(tWzrost.getText());	         
	           }	       
	           catch(Exception e)
	           {
	               ok = false;
	           }
	           if(ok)
	           {
	               double bmi = (waga/Math.pow(wzrost/100,2));
	               if(bmi<16)
	               {
	            	   output.setText("Witaj " +tImie.getText()+"!" + "\n\nTwój indeks BMI wynosi: " + bmi + " \n\n "
		            	   		+ "Twój indeks BMI jest skrajnie niski. \n Koniecznie skonsultuj się z lekarzem!");
	               }
	            	   
	               else if(bmi<18)
	               {
	            	   output.setText("Witaj " +tImie.getText()+"!" + "\n\nTwój indeks BMI wynosi: " + bmi + " \n\n "
	            	   		+ "Niestety Twój indeks BMI jest za niski. \n Zmień tryb życia oraz zacznij się lepiej odżywiać!");
	               }
	               else if (bmi>25 && bmi<=30)
	               {
	            	   output.setText("Witaj " +tImie.getText()+"!" + "\n\nTwój indeks BMI wynosi: " + bmi + " \n\n "
		            	   		+ "Niestety Twój indeks BMI jest za wysoki. \n Zmień tryb życia, pora na odchudzanie!");
	               }
	               else if (bmi>30 && bmi<=35)
	               {
	            	   output.setText("Witaj " +tImie.getText()+"!" + "\n\nTwój indeks BMI wynosi: " + bmi + " \n\n "
		            	   		+ "Niestety Twój indeks BMI jest za za wysoki. \n Wskazuje on na I stopień otyłości! \n "
		            	   		+ "Zaczerpnij porady dietetyka, \ni natychmiastowo zmień dietę!");
	               }
	               else if (bmi>=35)
	               {
	            	   output.setText("Witaj " +tImie.getText()+"!" + "\n\nTwój indeks BMI wynosi: " + bmi + " \n\n "
		            	   		+ "Niestety Twój indeks BMI jest za za wysoki. \n Wskazuje on na II stopień otyłości! \n "
		            	   		+ "Natychmiastowo zmień dietę!\n Czas na poważne odchudzanie, to już nie są żarty!");
	               }
	               else
	               {
	            	   output.setText("Witaj " +tImie.getText()+"!" + "\n\nTwój indeks BMI wynosi: " + bmi + " \n\n "
		            	   		+ "Gratulacje, Twój indeks BMI jest w normie!\n Tak trzymać!");
	               }
	               
	           }
	           else
	           {
	               output.setText(tImie.getText()+"Podaj poprawne dane! \n \n -wiek musi być liczbą całkowitą. "
	               		+ "\n -waga lub wzrost może zostać podane w postaci \n   liczby dziesiętnej");
	           }
	       }
	   }       
	}
	

Teraz zastanawiam się nad tym formatowaniem tekstu (trochę bym się tym pobawił) do tego chciałbym zabezpieczyć program przed możliwością wpisania nieprawdziwych danych np. Wiek 12000 lat, wzrost 1500 itd. - ktoś jakieś pomysły ?

edytowany 2x, ostatnio: Adii69
flowCRANE
Popracuj trochę nad interfejsem - ułóż równo komponenty; No i wywal przycisk Wyjście z programu - do tego celu służy systemowy przycisk X i jak zawsze Alt+F4
A6
Przycisk wyjście jest tylko i wyłącznie żeby trenować :D
pedegie
  • Rejestracja:około 11 lat
  • Ostatnio:ponad rok
  • Postów:204
0

możesz formatować HTML'em tekst : )

Kopiuj
String htmlText = "<html><FONT SIZE=+3>" +                          
                      "Witaj<font color=red><b> Javo!</b></font><br>" +
                      "<font color=blue>... A witaj!</font></html>";
edytowany 1x, ostatnio: pedegie
A6
próbowałem ale coś mi błędy wyrzucało, w jakim miejscu i jak to zastosować?
A6
Hmm, nadal nie chce się formatować, albo w złym miejscu to wklejam :/ Np chcę żeby napis "Podaj swoje imię" był pogrubiony, jak ten html zastosować?
A6
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:24
0
Kopiuj
Double bmi = new Double(waga/Math.pow(wzrost/100,2));
	        		java.text.DecimalFormat bmif=new java.text.DecimalFormat();
	        		bmif.setMaximumFractionDigits(2);
	        		bmif.setMinimumFractionDigits(2);

W ten sposób skróciłem wynik do dwóch liczb po przecinku, czy w miarę dobrze mi to wyszło ? :D
Niby działa, ale wolę zapytać.

Nadal pozostają 2 ostatnie pytania, nie wiem jak z nimi sobie poradzić ;/

  1. Formatowanie tekstu (trochę bym się tym pobawił), ponoć można html'em, ale gdzie dokładnie kodować?
  2. Do tego chciałbym zabezpieczyć program przed możliwością wpisania nieprawdziwych danych np. Wiek 12000 lat, wzrost 1500 itd. - ktoś jakieś pomysły ?
  3. W jaki sposób dodać jakiś prosty obrazek/i albo ikonkę? - prosił bym o przykład.

edit.
I jeszcze jedno pytanko, program wykonuję zadanie dopiero po tym jak kliknę za drugim razem w przycisk oblicz BMI, co może być tego powodem ?

Dzięki z góry! ;)

edytowany 2x, ostatnio: Adii69
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1
  1. Np. tak
Kopiuj
new JLabel("<html>A teraz będzie <b>pogrubione</b></html>"); 
Kopiuj
        bOblicz = new JButton("Oblicz BMI");
        bOblicz.setBounds(250, 300, 100, 50);
        bOblicz.addActionListener(new Liczydlo());

a ten fragment

Kopiuj
        else if (źródło==bOblicz)
        {
            bOblicz.addActionListener(new Liczydlo());    
        }

usuń.
3.

Kopiuj
add(new JLabel(new ImageIcon(scieżka_do_pliku_graficznego))
  1. Chcesz nie pozwolić wpisać durnych danych, czy tylko nie wykonywać obliczeń, gdy dane są durne?

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
A6
Wielkie dzięki, wiele rzeczy mi prosto i logicznie wyjaśniasz ;) Ad.2 Tzn. ogólnie moim takim skromnym marzeniem jest taka opcja że np jak wpiszesz niepoprawne dane (lub nielogiczne) np wiek 1500, albo waga 1500, to wyskoczy konkretne powiadomienie (np na czerwono) że "wiek wpisany przez Ciebie jest nieprawidłowy", albo że "w polu wzrost wpisałeś niedozwolone znaki" Bo teraz wypisuje mi jeden komunikat do wszystkiego, a chciałbym przypisywać każdy komunikat konkretnemu błędowi.
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Zrób, do odczytywania danych, trzy bloki try.

Kopiuj
               String msg ="";
               boolean ok = true;
               try
               {
                   wiek = Integer.parseInt(tWiek.getText().trim());        
               }           
               catch(Exception e)
               {
                   output.setForeground(Color.RED);
                   output.setText("Wiek musi być liczbą całkowitą");
                   tWiek.requestFocus(); //przenosi kursor do pola tWiek
                   return;
               }
               if(wiek < 3)
              {
                   msg = "Żarty sobie robisz? Wracaj do kojca!";
                   ok = false;
              }
              else if(wiek >120)
              {
                   msg = "Nie wierzę, tylko wampiry żyją tak długo";
                   ok = false;  
              }
              else if(wiek < 8 || wiek >80)
              {
                   msg = "Współczynnik BMI jest wiarygodny tylko dla ludzi z przedziału wiekowego 8-80";
                   ok = false;
              }
              if(!ok)
             {
                  output.setForeground(Color.RED);
                  output.setText(msg);
                  tWiek.requestFocus();
                  return;
             }

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

@up
Wielkie dzięki, już posługuję się Twoim przykładem :)

i tak na szybko:

Kopiuj
			output.setText("<html>Dla osób dorosłych wartość BMI wskazuje na:\n\n Według podstawowej klasyfikacji:\n</html>"
					+ "<html><ul> <li> x < 18,5 – niedowagę </li></html>");

przy komendzie output.setText w jaki sposób mogę formatować tekst?
Znaczniki html nie działają :/

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

W JTextArea nie możesz formatować fragmentów, możesz zmienić tylko format całego tekstu. Użyj komponentu JTextPane.


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

Ok zaraz popróbuję, a mam pytanie czy jak dodam jakiś obrazek czy ikonę, czy jest możliwość wyświetlania tego pod tekstem i pod polami, jako taki background?

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

Tak, schemat jest taki:

Kopiuj
setLayout(null);
setPreferredSize(new Dimension(szerokość_obrazka,wysokość obrazka));
//dodawanie komponentów
JLabel background = new JLabel(new ImageIcon(ścieżka do obrazka));
background.setOpaque(true); //ważne!
background.setBounds(0,0,...,...);
add(background);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
Słuchaj, bo jeszcze chciałem dodać zabezpieczenie przed wpisaniem liczb i innych znaków w pole Imienia, próbowałem podobnie jak z wiekiem i wagą ale tutaj jest wyraz, kombinowałem coś ze stringiem, ale nie do końca jestem pewien czy w dobrym kierunku
A6
Nadal nie dałem rady, jak byś był skory podrzucić jakąś podpowiedź ;)
bogdans
A po co to zabezpieczenie? Niektórzy mają cyfry w imieniu, np. "Adii69". Niech każdy się przedstawia jak chce.
A6
Bardziej po to żeby wiedzieć na przyszłość :P
A6
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:24
0

Dzięki wszystkim za pomoc i wskazówki!
Praca nad programem nadal trwa, powiem wam że odczułem już wyrobienie pewnej wprawy, wiele rzeczy jest dla mnie jeszcze czarną magią, ale z dnia na dzień poznaję nowe rzeczy i ich zastosowania.

Na dzień dzisiejszy programik wygląda tak:

user image

I przy okazji mam jedno pytanie, podczas gdy robię export programu do pliku wykonywalnego jar (chcę normalnie odpalić program z poziomu windowsa) to w programie nie zapisuje się tło, tylko program używa domyślnego. Jak zrobić żeby wyexportowany program odpalał się z moim tłem?

edytowany 1x, ostatnio: Adii69
flowCRANE
No, teraz interfejs sprawia wrażenie dopracowanego :)
A6
a dziękuję, dziękuję :D
bogdans
Mi też się podoba.
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Skopiuj obrazki do katalogu z jarem, albo umieść je w pliku jar. W drugim przypadku musisz zapewne inaczej je czytać.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
Hmm, W takim razie jak umieścić obrazki w pliku jar?
bogdans
Jak robisz jara? Jeżeli z IDE, to pewnie obrazki już tam są. Jar to zip z innym rozszerzeniem, przemianuj na chwile na zipa i podejrzyj co jest w środku.
A6
Jara robię eclipse za pomocą export -> runable jar file -> Package required libraries into generated JAR Otworzyłem i nie ma tutaj pliku tlo1.png (taki ma tytuł) , jakieś pomysły ?
bogdans
Możesz obrazek dopakować do jara. Ale zwróć uwagę na to: albo umieść je w pliku jar. W drugim przypadku musisz zapewne inaczej je czytać. Używasz do czytania metody getResource?
A6
dodam nowy post i wrzucę w nim kod
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Dwa sposoby rozpoznawania czy String s zawiera tylko polskie litery

Kopiuj
boolean onlyLetters(String s)
{
     boolean result = true;
     for(char c:s.toCharArray())
     {
         result = result && Character.isLetter(c);
     }
     return result; 
}
//przy pomocy wyrażeń regularnych
Pattern.matches("[\\p{javaLowerCase}|\\p{javaUpperCase}]*",s);

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
A6
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:24
0
Kopiuj
		setLayout(null);
		setPreferredSize(new Dimension(700,700));
		JLabel background = new JLabel(new ImageIcon("tlo1.png"));
		background.setOpaque(true); //ważne!
		background.setBounds(0, 0, 700, 700);
		add(background);

Używam tego kodu wysłanego przez Ciebie.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0
Kopiuj
JLabel background = new JLabel(new ImageIcon(NazwaTwojejKlasy.class.getResource(ścieżka_od_klasy_do_obrazka+"tlo1.png"));

Najprościej, to umieścić plik "tlo1.png" obok klasy, wtedy

Kopiuj
JLabel background = new JLabel(new ImageIcon(NazwaTwojejKlasy.class.getResource("tlo1.png"));

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
A6
Jak stosuję drugą metodę to w eclipse normalnie wszystko działa a po przeniesieniu progroamu do jar'a program się nie włącza, po prostu nic się nie pokazuje. Co może być nie tak ?
bogdans
Uruchom program w konsoli poleceniem java -jar nazwaJara. Uruchomienie dwuklikiem wywołuje (w windzie) program javaw (a nie java). javaw nie otwiera konsoli i nie można obejrzeć komunikatów o błędach.
A6
chodzi o konsolę cmd ?
A6
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:24
0

Witam po krótkiej przerwie, niestety <ort>nie zależnej</ort> ode mnie.
No a więc biorę się za ten background o efektach poinformuję wkrótce, pozdrawiam.

edytowany 1x, ostatnio: flowCRANE
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)