problem z JComponent i wyswietleniu go w JFrame

0

Mam klasę "Okno" która dziedziczy po JFrame, w tej klasie tworze sobie GUI z wykorzystaniem Menu, JPanel gdzie mam przybornik oraz dwie klasy dziedziczące po JComponent. Tworzę Container i dodaje do niego elementy w następujący sposób:

 
Container content = getContentPane();
content.setLayout(new BorderLayout());
content.add(BorderLayout.NORTH, panel);
content.add(BorderLayout.CENTER, rysownik);
// content.add(BorderLayout.EAST, rysownik_przychodzacy); // ??

gdy mam za komentowaną ostatnią linijkę, gdzie dodaję ostatni component, wszystko działa prawidłowo, gdy ją od komentuję, a CENTER zamienię na WEST, nic się nie wyświetla na ekranie, tylko jest pustka. Moje pytanie brzmi, jak ustawić te komponenty aby było obok siebie na ekranie, gdzie po lewej jest rysownik z białym ekranem do rysowania, a po jego prawej stronie rysownik_przychodzacy? Klasa rysownik służy mi do rysowania, gdzie rysownik to klasa dziedzicząca po JComponent, a w niej wykorzystuję do rysowania Image oraz Graphics2D, rzut oka na funkcję:

public void paintComponent(Graphics g) {
		if (image == null) {
			image = createImage(500, 465);
			graphics2D = (Graphics2D) image.getGraphics();
			graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
					RenderingHints.VALUE_ANTIALIAS_ON);

			clear();
		}
 g.drawImage(image, 0, 0, null);
}

klasa rysownik_przychodzacy, to jest klasa identyczna do rysownik, tylko w tym przypadku na nim nie rysuję za pomocą myszki, tylko wyświetlam w nim rysunek, który jest rysowany, na drugim komputerze w sieci, przy wykorzystaniu tego programu, dla testu wrzuciłem w rysownik_przychodzący

g.setColor(Color.BLACK);

jak jest jeden komponent to działa, jak dwa to już nie :(

obrazki są wielkości (500, 465), okienko jest ustawione na (1000, 500) więc dwa JComponent powinny się mieścić.
To chyba wszystkie informacje, które będą pomocne.
Dołączam jeszcze plik z całym kodem źródłowym jak potrzeba http://www.sendspace.pl/file/164e8e0a641b3d39926903d
Dziękuję z góry za pomoc :)

0

Nie rozumiem w czym problem, w zamieszczonym kodzie jest

content.add(BorderLayout.NORTH, panel);
content.add(BorderLayout.CENTER, rysownik);
content.add(BorderLayout.WEST, rysownik_przychodzacy);

i wszystko się wyświetla. Natomiast bardzo denerwujące jest przesuwanie się elementów w górnym panelu.

0

No to nie wiem jak to zrobiłeś, ale mi się nie wyświetla ta druga część do rysowania obok tej 'rysownik', poza tym nie przesuwa mi się nic w górnym panelu :)
Dołączam screena, po prawej od rysownika gdzie jest nabazgrane, powinno być drugie takie samo :)
Dorzucam trochę zmodyfikowany kod rysownika_przychodzacego:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;

import javax.swing.JComponent;

public class RysownikPrzychodzacy extends JComponent {
	// obrazek gdzie bedzie rysunek
	Image image;
	// klasa do rysowania
	Graphics2D graphics2D;
	// pozycje myszki
	int aktualna_pos_X, aktualna_pos_Y, stara_pos_X, stara_pos_Y, posX, posY;

	public RysownikPrzychodzacy() {
		setDoubleBuffered(false);
	}

	public void paintComponent(Graphics g) {
		if (image == null) {
			image = createImage(500, 465);
			graphics2D = (Graphics2D) image.getGraphics();
			graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
					RenderingHints.VALUE_ANTIALIAS_ON);
			
			clear();
		}
		
		g.drawImage(image, 500, 0, null);
		repaint();
	}
	
	public void clear() {
		graphics2D.setPaint(Color.white);
		graphics2D.fillRect(0, 0, getSize().width, getSize().height);
		graphics2D.setPaint(Color.black);
		repaint();
	}
}
0

Chcesz uzyskać takie user image coś?
Jeśli tak, to kod ma sporo usterek. Jeśli chcesz zobaczyć drgające elementy w górnym panelu, to przesuwaj kursor myszy tak jego współrzędne zmieniały się z jednocyfrowych na trzycyfrowe i z powrotem.

0

A mógłbyś zarzucić swoim kodem w którym to działa co pokazałeś. Bo ja sprawdzałem u siebie na Eclipsie i Netbeans oraz u kumpla też na Eclipse i Netbeans i za każdym razem był ten sam wynik co pokazałem na screenie?

0
  1. W klasie Okno
content.setLayout(new BorderLayout(2,2));

żeby były odstępy miedzy komponentami.
2. W konstruktorach klas Rysownik i RysownikPrzychodzacy

setPreferredSize(new Dimension(500,465));
  1. Nie używaj takich konstrukcji: paintComponent wywołuje clear, clear wywołuje rapaint. Repaint, to sugestia pod adresem JVM aby wywołać paintComponent. Można uzyskać nieskończoną pętlę.
0

Ok to już wszystko wiem i to uruchomiłem poprawnie, dzięki wielkie za pomoc :)

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