Jak w JScrollPane wyswietlic kilka JPanel-i

0

Problem jest taki: Mam zrobiony scrollP klasy JScrollPane za pomoca komendy new JScrollPane(). To jest oczywiscie wsadzone do frame-a. Do tego scrolla dodaje dwa panele (drawArea i drawPoly) za pomoca komendy scrollP.add(drawArea) i scrollP.add(drawPoly). No i wszystko sie ladnie kompiluje tylko nie wyswietla zawartosci drawArea ani drawPoly... Dlaczego?? Dodam jeszcze ze: jak uzywalem new JscrollPane(drawArea) to wyswietlalo ten panel ladnie. Nie lapie co robie zle...

Nieco skrocona wersja kodu:

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.GeneralPath;
import java.io.*;
import java.awt.image.BufferedImage;
import javax.swing.*;

public class Selector extends JPanel
{
	JPanel drawArea, drawPoly;    //dwa panele do wlaczenia do scrolla
	Poly pol;                               //rozne zmienne potrzebne w programie
	Polygon polygon;
	Line lines[];
	int rowsN=0, columnsN=0, bandsN, pixelsN=0, linesN=0;
	int pixels[], selection[], polyX[], polyY[];
	boolean poly=false, change=false;
	
	public Selector()
	{
		drawArea = new DrawArea();
		drawArea.setBackground(Color.WHITE);
		drawArea.addMouseListener(new Mouse());
		
		drawPoly = new DrawPoly();
		drawPoly.addMouseListener(new Mouse());
		
		JScrollPane scrollP = new JScrollPane();
		scrollP.add(drawArea);
		scrollP.add(drawPoly);
		scrollP.setBackground(Color.WHITE);
		scrollP.addMouseListener(new Mouse());
		scrollP.setPreferredSize(new Dimension(600, 600));
		
		add(scrollP, BorderLayout.CENTER);
	}
	
	private static void createAndShowGUI() {
        JFrame.setDefaultLookAndFeelDecorated(false);	//window decorations

        JFrame frame = new JFrame("Point Selector");	//Create and set up the window.
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        Selector selector = new Selector();	//Create and set up the content pane.
        frame.setJMenuBar(selector.doMenu());
        selector.setOpaque(true); //content panes must be opaque
        frame.setContentPane(selector);

        frame.pack();	//Display the window.
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
    
    public class DrawArea extends JPanel  
    {
    	int column, row, i; //zmienne sterujace rysowaniem
    	
    	public void paint(Graphics g)
    	{
    		super.paint(g);
    		if (change==true) //aby nie porobowal rysowac z pustych zbiorow
                {
	            column=0; 
	    		i=0;
	    		for (row=0; row<rowsN; row++)
	    		{
	    			for(column=0; column<columnsN; column++)
	    			{
	    				g.setColor(new Color(pixels[i], pixels[i], pixels[i])); //rysowanie obrazu z 
	    				g.drawLine(column, row, column, row);                   //bufora pikseli
	    				i+=1;
	    			}
	    		}
                }
    	}
    }

    public class DrawPoly extends JPanel
    {	
    	protected void Paint(Graphics g)
    	{
                super.paint(g);
    		for (int i=0; i<linesN; i++) //rysowanie lini z bufora lini
    		{
    			g.setColor(Color.RED);
    			g.drawLine(lines[i].xs, lines[i].ys, lines[i].xe, lines[i].ye);
    		}

    		g.setColor(Color.RED); //rysowanie poligonu
    		g.fillPolygon(polygon);
    	}
    }

	void drawImage() //metoda wywolywana po wczytaniu danych aby narysowala drawArea
	{
		change=true;
		
		drawArea.setPreferredSize(new Dimension(columnsN, rowsN));
		drawArea.revalidate();    //potrzebne??
		drawArea.repaint();        //potrzebne??
		tools.getItem(4).setEnabled(true);
	}
    }
//sa jeszcze metody tworzace linie i poligon do narysowania w drawPoly i probojace go wywolac podobnie jak drawImage
}
0

W JScrollPane umieszcza się 1 komponent, więc jeśli checesz umieścić kilka musisz je zgrupować innym komponentem (np. JPanel) z odpowiednim layoutem (np. GridLayout). Czyli tworzysz swoje panele, tworzysz panel grupujący, ustawiasz mu layout, dodajesz swoje panele do panela grupującego, tworzysz JScrollPane z panelem grupującym.

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