Java przekazywanie paintComponent do konstruktora klasy


(Duzy Rysiek) #1

witam serdecznie. piszę program do wypełniania druku przelewu. mam mały problem ponieważ nie wiem jak przekazać metodę z narysowanym drukiem do konstruktora klasy. gdy wprowadzę argument null to wyświetla się sama ramka (co jest oczywiste), ale chce żeby były wyświetlane wszystkie elementy druku

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;


public class Wypelnianie extends JPanel

{

	public Wypelnianie()

	{

		ramkaAplikacji();

                paintComponent();

	}


	public void ramkaAplikacji()

	{

		JFrame ramka = new JFrame();

		ramka.setBounds(0,0,700,980);

		ramka.setVisible(true);

		ramka.setResizable(false);

		ramka.setDefaultCloseOperation(3);

	}


	public void paintComponent (Graphics g)

	{

		//ustawinie czcionki, wypełnienie ramki kolorem białym

		g.setFont(new Font("Arial",Font.BOLD, 10));

		g.setColor(Color.white);

		g.fillRect(0,0,3000,3000);

		//linie do przycięcia druku

		g.setColor(Color.black);

		g.drawRect(10,5,630,470);

		g.drawRect(10,475,630,470);		


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

		/ ***Odcinek dla instytucji przyjmującej zlecenie*** /

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

(Razi) #2

nigdy nie wywołuj paintComponent ręcznie, zawsze repaint(). jeśli już musisz wymusić przerysowanie, najlepiej jeszcze jakbyś to zrobił przez SwingUtilities.

Poza tym nie dodajesz obiektu swojej klasy do okna, więc i tak nie będzie się rysować.


(Duzy Rysiek) #3

a mogę prosić o przykład wywołania metody repaint()? :wink:


(Razi) #4

oto przykład:

repaint();

lub przez SwingUtilities:

SwingUtilities.invokeLater(new Runnable(){public void run(){

  repaint();

  }

});

(Duzy Rysiek) #5

ale gdzie mam go wywołać?? o to mi chodziło :lol: jestem trochę zielony z javy :frowning:


(Airborn) #6

Razi , akurat repaint() można bezproblemowo wywołać spoza EDT i nie ma potrzeby opakowywać go w cokolwiek.


(Yuri20) #7

Metodę repaint wywołuj na rzecz obiektu, którego chcesz przerysować.

obiekt.repaint();


(Razi) #8

repaint wywołujesz tylko gdy coś się zmienia, ale swing o tym nie wie, normalnie metoda rysującajest wykonywanady musi - pojawienie się okna, zmiana rozmiaru itd.


(Duzy Rysiek) #9

dzięki za odpowiedzi :wink: poradziłem sobie w inny sposób :smiley: ale mam takie jeszcze dwa pytania.

otóż mój program składa się z czterech klas.

ProgramDruku - główna klasa wywołująca program

public class ProgramDruku 

{

	ProgramDruku()

	{

		new Formularz();

	}

static public void main (String arg[])

{

	new ProgramDruku();

}

}

Formularz - wprowadzanie danych

import java.awt.Color;

import java.awt.Font;

import java.awt.event.*;

import javax.swing.*;


public class Formularz implements ActionListener

{


	//ramka i panel

	private JFrame rFormularz = new JFrame();

	private JPanel pFormularz = new JPanel(null);


	//przyciski

	private JButton bZamknij = new JButton("Zakończ");

	private JButton bInfo = new JButton("Informacje");

	private JButton bPodglad = new JButton("Podglad");

	private JButton bZapis = new JButton("Generuj druk");


	//radio buttony

	private ButtonGroup bG = new ButtonGroup();

	private JRadioButton rbWplata = new JRadioButton("",true);

	private JRadioButton rbPrzelew = new JRadioButton("",false);


	//etykiety

	private JLabel eNazwaOdbiorcy1 = new JLabel("Nazwa odbiorcy");

	private JLabel eNazwaOdbiorcy2 = new JLabel("Nazwa odbiorcy cd.");

	private JLabel eNrRachunku = new JLabel("Numer rachunku odbiorcy");

	private JLabel eWplata = new JLabel("Wpłata gotówkowa");

	private JLabel ePrzelew = new JLabel("Polecenie przelewu");

	private JLabel eWaluta = new JLabel("Waluta");

	private JLabel ePLN = new JLabel(" PLN ");

	private JLabel eKwota = new JLabel("Kwota");

	private JLabel eKwotaSlownie = new JLabel("Nr rachunku zleceniodawcy (polecenie przelewu) / kwota słownie (wpłata gotówkwa)");

	private JLabel eNazwaZleceniodawcy1 = new JLabel("Nazwa zleceniodawcy");

	private JLabel eNazwaZleceniodawcy2 = new JLabel("Nazwa zleceniodawcy cd.");

	private JLabel eTytulem1 = new JLabel("Tytułem");

	private JLabel eTytulem2 = new JLabel("Tytułem cd.");


	//pole tekstowe

	private JTextField tNazwaOdbiorcy1 = new JTextField();

	private JTextField tNazwaOdbiorcy2 = new JTextField();

	private JTextField tNrRachunku = new JTextField();

	private JTextField tWaluta = new JTextField("PLN");

	private JTextField tKwota = new JTextField();

	private JTextField tKwotaSlownie = new JTextField();

	private JTextField tNazwaZleceniodawcy1 = new JTextField();

	private JTextField tNazwaZleceniodawcy2 = new JTextField();

	private JTextField tTytulem1 = new JTextField();

	private JTextField tTytulem2 = new JTextField();


	public Formularz()

	{

		ramkaFormularz();

	}


	public void ramkaFormularz()

	{

		rFormularz.setBounds(720,300,530,530);

		rFormularz.setTitle("Druk: polecenie przelewu / Wpłata gotówkowa");

		rFormularz.setVisible(true);

		rFormularz.setResizable(false);

		rFormularz.setContentPane(pFormularz);

		rFormularz.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		wypelnianie();

		przyciski();

	}


	public void wypelnianie()

	{

		//pole "Nazwa odbiorcy"

		eNazwaOdbiorcy1.setBounds(10,10,100,15);

		pFormularz.add(eNazwaOdbiorcy1);

		tNazwaOdbiorcy1.setBounds(10,25,500,25);

		pFormularz.add(tNazwaOdbiorcy1);


		//pole "Nazwa odbiorcy cd."

		eNazwaOdbiorcy2.setBounds(10,55,120,15);

		pFormularz.add(eNazwaOdbiorcy2);

		tNazwaOdbiorcy2.setBounds(10,70,500,25);

		pFormularz.add(tNazwaOdbiorcy2);


		//pole "Numer rachunku odbiorcy cd."

		eNrRachunku.setBounds(10,100,160,15);

		pFormularz.add(eNrRachunku);

		tNrRachunku.setBounds(10,115,500,25);

		pFormularz.add(tNrRachunku);


		//pole "Wpłata gotówkowa"

		eWplata.setBounds(120,145,115,20);

		pFormularz.add(eWplata);

		rbWplata.setBounds(235,145,20,20);

		bG.add(rbWplata);

		pFormularz.add(rbWplata);


		//pole "Polecenie przelewu"

		ePrzelew.setBounds(120,165,115,20);

		pFormularz.add(ePrzelew);

		rbPrzelew.setBounds(235,165,20,20);

		bG.add(rbPrzelew);

		pFormularz.add(rbPrzelew);


		//pole "Waluta"

		eWaluta.setBounds(270,145,50,20);

		pFormularz.add(eWaluta);

		ePLN.setFont(new Font("Arial",Font.BOLD,14));

		ePLN.setBounds(260,165,70,20);

		pFormularz.add(ePLN);


		//pole "Kwota"

		eKwota.setBounds(350,145,50,20);

		pFormularz.add(eKwota);

		tKwota.setBounds(350,165,160,20);

		pFormularz.add(tKwota);


		//pole "Nazwa zleceniodawcy"

		eKwotaSlownie.setBounds(10,195,500,20);

		pFormularz.add(eKwotaSlownie);

		tKwotaSlownie.setBounds(10,215,500,20);

		pFormularz.add(tKwotaSlownie);


		//pole "Nazwa zleceniodawcy"

		eNazwaZleceniodawcy1.setBounds(10,245,500,20);

		pFormularz.add(eNazwaZleceniodawcy1);

		tNazwaZleceniodawcy1.setBounds(10,265,500,20);

		pFormularz.add(tNazwaZleceniodawcy1);


		//pole "Nazwa zleceniodawcy cd."

		eNazwaZleceniodawcy2.setBounds(10,295,500,20);

		pFormularz.add(eNazwaZleceniodawcy2);

		tNazwaZleceniodawcy2.setBounds(10,315,500,20);

		pFormularz.add(tNazwaZleceniodawcy2);


		//pole "Tytulem"

		eTytulem1.setBounds(10,345,50,20);

		pFormularz.add(eTytulem1);

		tTytulem1.setBounds(10,365,500,20);

		pFormularz.add(tTytulem1);


		//pole "Tytulem cd."

		eTytulem2.setBounds(10,395,70,20);

		pFormularz.add(eTytulem2);

		tTytulem2.setBounds(10,415,500,20);

		pFormularz.add(tTytulem2);

	}


	public void przyciski()

	{

		//przycisk "Genreuj druk"

		bZapis.setBounds(10,450,110,40);

		pFormularz.add(bZapis);

		bZapis.addActionListener(this);


		//przycisk "Podgląd"

		bPodglad.setBounds(130,450,110,40);

		pFormularz.add(bPodglad);

		bPodglad.addActionListener(this);


		//przycisk "Inforamcje"

		bInfo.setBounds(250,450,110,40);

		pFormularz.add(bInfo);

		bInfo.addActionListener(this);


		//przycisk "Zamknij"

		bZamknij.setBounds(370,450,110,40);

		pFormularz.add(bZamknij);

		bZamknij.addActionListener(this);

	}


	public void actionPerformed(ActionEvent e) 

	{

		Object ob = e.getSource();

		if (ob==bZapis)

		{


		}

		else if (ob==bPodglad)

		{

			new Wypelnianie();

		}

		else if (ob==bInfo)

		{

			JOptionPane.showMessageDialog(null, "Program na zaliczenie przedmoitu.\n");

		}

		else if (ob==bZamknij)

		{

			System.exit(0);

		}

	}

}

Wypelnianie - klasa rysująca druk z klasy Druk oraz tworząca nową ramkę

import java.awt.Graphics;

import javax.swing.*;


public class Wypelnianie

{

	JDialog dWypelnianie = new JDialog();

	Druk druk = new Druk();


	public Wypelnianie()

	{

		ramkaWypelnianie();

	}


	public void ramkaWypelnianie()

	{

		dWypelnianie.setModal(true);

		dWypelnianie.setBounds(10,10,800,980);

		dWypelnianie.add(druk);

		dWypelnianie.setTitle("Podgląd wypełnionego druku");

		dWypelnianie.setVisible(true);

		dWypelnianie.setResizable(true);

		dWypelnianie.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

	}


	}

Druk - klasa rysująca druk

import java.awt.*;


import javax.swing.*;


public class Druk extends JPanel 

{	




	public void paintComponent (Graphics g)

	{

		Graphics2D g2 = (Graphics2D) g;

		//ustawinie czcionki, wypełnienie ramki kolorem białym

		g.setFont(new Font("Arial",Font.BOLD, 10));

		g.setColor(Color.white);

		g.fillRect(0,0,3000,3000);

		//linie do przycięcia druku

		g.setColor(Color.black);

		g.drawRect(10,5,630,470);

		g.drawRect(10,475,630,470);		

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

		/ ***Odcinek dla instytucji przyjmującej zlecenie*** /

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

		//obrysowanie druku

		g.setColor(Color.BLACK);

		g.drawRect(39,9,571,461);

		//wypełnienie druku kolorem jasno szarym

		g.setColor(Color.LIGHT_GRAY);

		g.fillRect(40,10,570,460);

		//Pole "Nazwa odbiorcy"

		g.setColor(Color.black);

		g.drawString("Nazwa odbiorcy",50,21);

		g.setColor(Color.black);

		g.drawRect(49,24,551,21);

		g.setColor(Color.white);

		g.fillRect(50,25,550,20);


		//Pole "Nazwa odbiorcy cd."

		g.setColor(Color.black);

		g.drawString("Nazwa odbiorcy cd.",50,56);

		g.setColor(Color.black);

		g.drawRect(49,59,551,21);

		g.setColor(Color.white);

		g.fillRect(50,60,550,20);


		//Pole "Numer rachunku odbiorcy"

		g.setColor(Color.black);

		g.drawString("Numer rachunku odbiorcy",50,91);

		g.setColor(Color.black);

		g.drawRect(49,94,551,21);

		g.setColor(Color.white);

		g.fillRect(50,95,550,20);


		//Pole do zaznaczenia "Wpłata"

		g.setColor(Color.black);

		g.drawRect(262,132,22,21);

		g.setColor(Color.white);

		g.fillRect(263,133,20,20);

		g.setColor(Color.black);

		g.drawString("W",268,148);


		//Pole do zaznaczenia "Przelew"

		g.setColor(Color.black);

		g.drawRect(283,132,21,21);

		g.setColor(Color.white);

		g.fillRect(284,133,20,20);

		g.setColor(Color.black);

		g.drawString("P",290,148);


		//Pole "Waluta"

		g.setColor(Color.black);

		g.drawString("Waluta",320,129);

		g.setColor(Color.black);

		g.drawRect(319,132,51,21);

		g.setColor(Color.white);

		g.fillRect(320,133,50,20);

		g.setColor(Color.black);

		g.drawString("PLN",332,148);


		//Pole "Kwota"

		g.setColor(Color.black);

		g.drawString("Kwota",400,130);

		g.setColor(Color.black);

		g.drawRect(399,132,201,21);

		g.setColor(Color.white);

		g.fillRect(400,133,200,20);


		//Pole "Numer rachunku zleceniodawcy ..."

		g.setColor(Color.black);

		g.drawString("Numer rachunku zleceniodawcy (polecenie przelewu) / kwota słownie (wpłata gotówkowa)",50,172);

		g.setColor(Color.black);

		g.drawRect(49,174,551,21);

		g.setColor(Color.white);

		g.fillRect(50,175,550,20);


		//Pole "Nazwa zleceniodawcy"

		g.setColor(Color.black);

		g.drawString("Nazwa zleceniodawcy",50,207);

		g.setColor(Color.black);

		g.drawRect(49,209,551,21);

		g.setColor(Color.white);

		g.fillRect(50,210,550,20);


		//Pole "Nazwa zleceniodawcy cd."

		g.setColor(Color.black);

		g.drawString("Nazwa zleceniodawcy cd.",50,243);

		g.setColor(Color.black);

		g.drawRect(49,245,551,21);

		g.setColor(Color.white);

		g.fillRect(50,246,550,20);


		//Pole "Tytułem"

		g.setColor(Color.black);

		g.drawString("Tytułem",50,278);

		g.setColor(Color.black);

		g.drawRect(49,279,551,21);

		g.setColor(Color.white);

		g.fillRect(50,280,550,20);


		//Pole "Tytułem cd."

		g.setColor(Color.black);

		g.drawString("Tytułem cd.",50,313);

		g.setColor(Color.black);

		g.drawRect(49,314,551,21);

		g.setColor(Color.white);

		g.fillRect(50,315,550,20);


		//Pole na datę i podpis zleceniodawcy

		g.setColor(Color.black);

		g.drawRect(49,354,251,101);

		g.setColor(Color.white);

		g.fillRect(50,355,250,100);

		g.setColor(Color.black);

		g.drawString("Pieczęć, data i podpis(y) zleceniodawcy",70,445);


		//pole "Opłata"

		g.setColor(Color.black);

		g.drawString("Opłata",330,375);

		g.setColor(Color.black);

		g.drawRect(329,379,71,21);

		g.setColor(Color.white);

		g.fillRect(330,380,70,20);



		//pole na pieczątkę

		g.setColor(Color.black);

		g.drawRect(419,354,101,101);

		g.setColor(Color.white);

		g.fillRect(420,355,100,100);

		g.setColor(Color.black);

		g.drawOval(435,370,70,70);


		//linia odzielająca dane od notacji urzędowych 

		g.setColor(Color.black);

		g.drawLine(40,345,610,345);

		g.setColor(Color.black);

		g.drawRect(560,345,40,20);

		g.setColor(Color.white);

		g.fillRect(561,346,39,19);


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

		/ ***Odcinek dla zleceniodawcy*** /

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



		//obrysowanie druku

		g.setColor(Color.BLACK);

		g.drawRect(39,479,571,461);

		//wypełnienie druku kolorem jasno szarym

		g.setColor(Color.LIGHT_GRAY);

		g.fillRect(40,480,570,460);


		//Pole "Nazwa odbiorcy"

		g.setColor(Color.black);

		g.drawString("Nazwa odbiorcy",50,493);

		g.setColor(Color.black);

		g.drawRect(49,494,551,21);

		g.setColor(Color.white);

		g.fillRect(50,495,550,20);


		//Pole "Nazwa odbiorcy cd."

		g.setColor(Color.black);

		g.drawString("Nazwa odbiorcy cd.",50,528);

		g.setColor(Color.black);

		g.drawRect(49,529,551,21);

		g.setColor(Color.white);

		g.fillRect(50,530,550,20);


		//Pole "Numer rachunku odbiorcy"

		g.setColor(Color.black);

		g.drawString("Numer rachunku odbiorcy",50,563);

		g.setColor(Color.black);

		g.drawRect(49,564,551,21);

		g.setColor(Color.white);

		g.fillRect(50,565,550,20);


		//Pole do zaznaczenia "Wpłata"

		g.setColor(Color.black);

		g.drawRect(262,602,21,21);

		g.setColor(Color.white);

		g.fillRect(263,603,20,20);

		g.setColor(Color.black);

		g.drawString("W",268,617);


		//Pole do zaznaczenia "Przelew"

		g.setColor(Color.black);

		g.drawRect(283,602,21,21);

		g.setColor(Color.white);

		g.fillRect(284,603,20,20);

		g.setColor(Color.black);

		g.drawString("P",290,617);


		//Pole "Waluta"

		g.setColor(Color.black);

		g.drawString("Waluta",320,600);

		g.setColor(Color.black);

		g.drawRect(319,602,51,21);

		g.setColor(Color.white);

		g.fillRect(320,603,50,20);

		g.setColor(Color.black);

		g.drawString("PLN",335,617);


		//Pole "Kwota"

		g.setColor(Color.black);

		g.drawString("Kwota",400,600);

		g.setColor(Color.black);

		g.drawRect(399,602,201,21);

		g.setColor(Color.white);

		g.fillRect(400,603,200,20);


		//Pole "Numer rachunku zleceniodawcy ..."

		g.setColor(Color.black);

		g.drawString("Numer rachunku zleceniodawcy (polecenie przelewu) / kwota słownie (wpłata gotówkowa)",50,645);

		g.setColor(Color.black);

		g.drawRect(49,648,551,21);

		g.setColor(Color.white);

		g.fillRect(50,649,550,20);


		//Pole "Nazwa zleceniodawcy"

		g.setColor(Color.black);

		g.drawString("Nazwa zleceniodawcy",50,680);

		g.setColor(Color.black);

		g.drawRect(49,683,551,21);

		g.setColor(Color.white);

		g.fillRect(50,684,550,20);


		//Pole "Nazwa zleceniodawcy cd."

		g.setColor(Color.black);

		g.drawString("Nazwa zleceniodawcy cd.",50,715);

		g.setColor(Color.black);

		g.drawRect(49,718,551,21);

		g.setColor(Color.white);

		g.fillRect(50,719,550,20);


		//Pole "Tytułem"

		g.setColor(Color.black);

		g.drawString("Tytułem",50,750);

		g.setColor(Color.black);

		g.drawRect(49,753,551,21);

		g.setColor(Color.white);

		g.fillRect(50,754,550,20);


		//Pole "Tytułem cd."

		g.setColor(Color.black);

		g.drawString("Tytułem cd.",50,785);

		g.setColor(Color.black);

		g.drawRect(49,788,551,21);

		g.setColor(Color.white);

		g.fillRect(50,789,550,20);


		//Pole na datę i podpis zleceniodawcy

		g.setColor(Color.black);

		g.drawRect(49,830,251,101);

		g.setColor(Color.white);

		g.fillRect(50,831,250,100);

		g.setColor(Color.black);

		g.drawString("Pieczęć, data i podpis(y) zleceniodawcy",70,920);


		//pole "Opłata"

		g.setColor(Color.black);

		g.drawString("Opłata",330,850);

		g.setColor(Color.black);

		g.drawRect(329,853,71,21);

		g.setColor(Color.white);

		g.fillRect(330,854,70,20);



		//pole na pieczątkę

		g.setColor(Color.black);

		g.drawRect(419,829,101,101);

		g.setColor(Color.white);

		g.fillRect(420,830,100,100);

		g.setColor(Color.black);

		g.drawOval(435,845,70,70);


		//linia odzielająca dane od notacji urzędowych 

		g.setColor(Color.black);

		g.drawLine(40,820,610,820);

		g.setColor(Color.black);

		g.drawRect(560,820,40,20);

		g.setColor(Color.white);

		g.fillRect(561,821,39,19);


	}

}
  1. chce aby pola JTextFiled wpisywały dane wprowadzone w formularzu na druczek.

  2. jak mogę zapisać druk do pliku graficznego np. JPEG


(Frankfurterium) #10

http://docs.oracle.com/javase/tutorial/ … image.html

http://docs.oracle.com/javase/1.4.2/doc … Image.html