Java applets Czyszczenie JPanel

0

Mam taki problem.
Tworze applets, kilka przycisków, gdzy wciskam jeden z przycisków za pomoca komendy
g.drawString("gdfsg",50,50);
wypisuje mi tekst na "Jpanelu"
teraz wciskam inny przycisk który ma wyczyscic jpanel z obecnego tekstu i wstawic nowy.
Da sie to zrobić za pomocą jednego przycisku??

0

Tak.

0

ok skor się da to jak to powinło wyglądać

..... // mamy action listnera

if( zrodlo == b1)
{
     g.drawString("sdfdf",50,50)
}
else if( zrodlo == b2)
{
     panel1.repain();                               // próbowałem w taki spsób ale usuwa tylko i już nie mogę wypisac innego tekstu za pomocą draw...
     g.drawString("sdfdf",50,50)
}
0

Nigdy nie rysuj w Listenerze, rysowanie musi być w funkcji paintComponent. Szkicowo:

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    g.drawString(txt,50,50);
}
//w listenerze
if(zrodlo == b1)
{
    txt = "a kuku";
}

txt jest polem w klasie

0
bogdans napisał(a):

Nigdy nie rysuj w Listenerze, rysowanie musi być w funkcji paintComponent. Szkicowo:

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    g.drawString(txt,50,50);
}
//w listenerze
if(zrodlo == b1)
{
    txt = "a kuku";
}

txt jest polem w klasie

czyli najlepiej w osobnej klasie utworzyc jpanel w któym bede rysowała a w listnerze tylko go wywołać?

0

Pewnie tak, w listenerze tylko zmiana parametrów rysunku i na końcu wywołanie repaint dla panelu.

0

Co jest tutja nie tak dlaczego po załczeniu nic mi nie rysuje???

package ol;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class paint extends JPanel
{
	String txt = " fsdfsd";
	
	public paint()
	{
		setPreferredSize(new Dimension(800,300));
		setLayout(null);
	}
	
	public void paintCompoment(Graphics g)
	{
		super.paintComponent(g);
		
		g.setColor(Color.BLACK);
		g.drawString(txt, 50, 50);
		g.drawRect(50, 50, 70, 70);
	}
}
0

Po pierwsze, na panelu służącym tylko do rysowania layout nie ma żadnego znaczenia. Instrukcja

setLayout(null);

jest całkowicie zbędna. Rada na przyszłość, zapomnij, że ta instrukcja istnieje.
Po drugie, przestrzegaj konwencji, nazwy klas powinny zaczynać się dużą literą.
Po trzecie, ten obiekt klasy paint trzeba umieścić w aplecie.

0

Obiekt klasy zamiescić w aplecie:

paint p1 = paint();

add(p1);

to ma się znajdować w aplecie??

0
Krwawy Orzeł napisał(a):

Obiekt klasy zamiescić w aplecie:

paint p1 = new paint();

add(p1);

to ma się znajdować w aplecie??

0
package ol;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

public class Aplet extends Applet implements ActionListener
{
	JPanel przycisi, galeria;
	JButton b[] = new JButton[6];
	
	
	String txt ;
	public void init()
	{
		
		setSize(800,620);
		setBackground(Color.GRAY);

		
		przycisi = new JPanel();
		przycisi.setPreferredSize(new Dimension(800,60));
		przycisi.setLayout(new GridLayout(1, 6));
		
			for(int i = 0; i < 6; i++)
			{
				b[i] = new JButton("" + i);
				b[i].addActionListener(this);
				przycisi.add(b[i]);
			}
			

		
		
		galeria = new JPanel();
		galeria.setPreferredSize(new Dimension(800,240));
		
		paint opisy = new paint();
		
		
		add(przycisi);
		add(opisy);
		add(galeria);
	}
	
	
	
	
	@Override
	public void actionPerformed(ActionEvent e) 
	{
		Object pobierz = new Object();
					
		pobierz = e.getSource();
		
		
		
			if(pobierz == b[0])
			{
				 txt="piesfgfdhbfgvhgfhfgek";
				 
				 
			
			}
			else if(pobierz == b[1])
			{
				 	
			}
			else if(pobierz == b[2])
			{
				
			}
			else if(pobierz == b[3])
			{
			
			}
			else if(pobierz == b[4])
			{
				
			}
			else if(pobierz == b[5])
			{

			
			}
		
	}
}

Kod klasy głównej

0
  1. Zmień lepiej nazwą głównej klasy apletu. Aplet to nazwa klasy ze standardowej biblioteki. Może powodować nieporozumienia.
  2. Rozmiar apletu ustala się w pliku HTML, a nie w kodzie.
<applet width="800" height="620" code="...">
</applet>
  1. Do klasy paint (nie zmieniłaś nazwy!) musisz przekazać referencję do głównej klasy apletu.
paint opisy = new paint(this);
  1. W metodzie actionPerformed brak repaint().
  2. W klasie paint muisz sie odwoływać do pola txt z głównej klasy.
public class paint extends JPanel
{
    Aplet parent = null;
 
    public paint(Aplet parent)
    {
        this.parent = parent;
        setPreferredSize(new Dimension(800,300));
    }
    @Override 
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);  
        g.setColor(Color.BLACK);
        g.drawString(parent.txt, 50, 50);
        g.drawRect(50, 50, 70, 70);
    }
}
0

Sory za natrętnosć, ale musze to ogarną, zrobię prosty przykład, teoretycznie powin<ort>łe</ort>m dostać panel z kreska ale nie pojawia się : oto kod:

  1. Klasa głowna
import java.applet.Applet;
import java.awt.Color;


public class Moje extends Applet
{
	public void init()
	{
		setBackground(Color.GRAY);
		
		Paint opsy = new Paint();
		
		add(opsy);
	}
}

2 klasa paint

import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JPanel;


public class Paint	extends JPanel
{
	
	
	public Paint()
	{
		
		 setPreferredSize(new Dimension(800,300));
	}
	
	public void paintCompoment(Graphics g)
	{
		super.paintComponents(g);
		
		g.drawLine(50, 100, 150, 300);
	}
}
0

paintComponent, a nie paintCompoment.

0

To ładnie zamuliłe, na tym przykładzie takze ogarn<ort> </ort>ołem z tym drawstring. Wielkie Dzięki.
Jeszcze sie zapytam JPanel staje se tak jakby niewidoczy? nie da się go wyr<ort> </ort>użnisć jakos ( np aby był biały )??

Teraz także wystarczy w listnerze dodać do przycisku repaint(); do panel i sei powinien wyczysścić?

0
    public Paint()
    {
         setBackground(Color.WHITE);
         setPreferredSize(new Dimension(800,300));
    }

Wczoraj

któym bede rysowała
,
dzisiaj
ogarnołem z tym

Nieoczekiwana zmiana płci?
Zaprzyjaźnij się ze słownikiem ortograficznym lub z wtyczką do przeglądarki sprawdzającą pisownię. Robisz też ogromną ilość literówek, smutno patrzeć na Twoje posty.

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