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
}