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??
Tak.
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)
}
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
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ć?
Pewnie tak, w listenerze tylko zmiana parametrów rysunku i na końcu wywołanie repaint dla panelu.
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);
}
}
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.
Obiekt klasy zamiescić w aplecie:
paint p1 = paint();
add(p1);
to ma się znajdować w aplecie??
Krwawy Orzeł napisał(a):
Obiekt klasy zamiescić w aplecie:
paint p1 = new paint();
add(p1);
to ma się znajdować w aplecie??
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
- Zmień lepiej nazwą głównej klasy apletu. Aplet to nazwa klasy ze standardowej biblioteki. Może powodować nieporozumienia.
- Rozmiar apletu ustala się w pliku HTML, a nie w kodzie.
<applet width="800" height="620" code="...">
</applet>
- Do klasy paint (nie zmieniłaś nazwy!) musisz przekazać referencję do głównej klasy apletu.
paint opisy = new paint(this);
- W metodzie actionPerformed brak repaint().
- 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);
}
}
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:
- 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);
}
}
paintComponent, a nie paintCompoment.
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ć?
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.