Jak w JScrollPane wyswietlic kilka JPanel-i

Odpowiedz Nowy wątek
2006-07-27 12:24
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
}

Pozostało 580 znaków

2006-07-27 18:45
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.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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