0

I've made a child class of JPanel for the graph plotting, added it to Palette, but when I'm trying to add it to the main panel nothing happens. Also if I try to add it as Non-Palette Component the dialog just closes and reopens again, asking to choose the class to add. Here's the class:

import javax.swing.*;
import java.awt.*;

/**
 * Created by gray on 05.11.14.
 */
public class PPanel extends JPanel {
// Object for the class realizing graph function
public Plotter G;
// Internal class for realization of graph function

class Plotter{
    // rane of the coordinats
    private double Xmin=0, Xmax=10.0, Ymin=0, Ymах= 120.0;
    // graph line color:
    private Color clr;
    // grid line color:
    private Color gclr;
    // class constructor
    Plotter(){
// read the text field and convert it into the number:
       /* try{
            Xmax=Double.valueOf(xmaxTF.getText());}
        catch(NumberFormatException е){
            xmaxTF.setText("10");
            Xmax=10;}*/
// initializing grid line color:
        gclr=Color.GRAY;
// initializing graph line color:
        clr=Color.BLACK;
    }
    // the function that is being displayed:
    private double f(double x){
        return (3*Math.exp(0.4*x)); }
    // methode for the grid display
    public void plot(Graphics Fig){
// parameters for the range in which graph is being displayed
        int H,W,h,w,s=20;
        H=getHeight();
        W=getWidth();
        h=H-2*s;
        w=W-2*s;
// clearing the graph
        Fig.clearRect(0,0,W,H);
// index and quantity of grid lines
        int k, nums=10;
        Fig.setColor(Color.BLACK);
// coordinate axis:
        Fig.drawLine(s,s,s,h+s);
        Fig.drawLine(s,s+h,s+w,s+h);
        for(k=0;k<=nums;k++){
            Fig.drawLine(s+k*w/nums, s+h, s+k*w/nums, s+h+5);
            Fig.drawLine(s-5,s+k*h/nums,s,s+k*h/nums);
            Fig.drawString(Double.toString(Xmin+k*(Xmax-Xmin)/nums),
                    s+k*w/nums-5,s+h+15);
            Fig.drawString(Double.toString(Ymin+k*(Ymах-Ymin)/nums),s-17,
                    s+h-1-k*h/nums);
        }
        Fig.setColor(gclr);
// grid lines:
            for(k=1;k<=nums;k++){
                Fig.drawLine(s+k*w/nums,s,s+k*w/nums,h+s);
                Fig.drawLine(s,s+(k-1)*h/nums,s+w,s+(k-1)*h/nums);
            }
// grаph display:
        Fig.setColor(clr);   // setting graph line color
// scaling coefficient:
        double dx=(Xmax-Xmin)/w,dу=(Ymах-Ymin)/h;
        // cartesian coordinates:
        double x1,x2,y1,y2;
// window coordinates:
        int h1,h2,w1,w2;
// initial values
        x1=Xmin;
        y1=0;
        w1=s;
        h1=h+s-(int)Math.round(y1/dу);
        int step=5;
// displaying the dots and connecting them with lines:
        for(int i=step;i<=w;i+=step){
            x2=i*dx;
            y2=y1+(x2-x1)*f(x2) ;
            w2=s+(int)Math.round(x2/dx);
            h2=h+s-(int)Math.round(y2/dу);
            Fig.drawLine(w1,h1,w2,h2);
            Fig.drawRect(w1-2,h1-2,4,4);
// new values:
            x1=x2;
            y1=y2;
            w1=w2;
            h1=h2;
        }
    }
}
// panel constructor
PPanel(){
// creating the object for the plot function:
    G=new Plotter();
    // setting the background color of the panel:
    setBackground(Color.WHITE);
}
// redefinition of the paint method:
public void paint(Graphics g){
// when redrawing the panel redraw graph as well
    G.plot(g);
}
}

And this is how it looks on the palette. But when I drag'n'drop it to the form nothing happens. The default elements are working just fine. What's wrong?

graynk
  • 131
  • 1
  • 2
  • 17
  • sure, sorry, my bad. comments are now translated – graynk Nov 05 '14 at 17:29
  • I kind of resolved the issue by making Plotter class independent and using it on the regular JPanel via the ActionListener(I press the button, Plotter draws on the JPanel) But I still need to overwrite the paint method somehow, so that every time I resize the window - the graph redraws. – graynk Nov 05 '14 at 18:17
  • found similar problem:http://stackoverflow.com/questions/14425476/intellij-refusing-to-add-custom-component I set bytecode version to 1.6, compiler to 1.6 as well and now it adds correctly(well, still not working properly, refusing to paint anything at all, but it adds at least) If I fix it by tomorrow, I will close the question – graynk Nov 05 '14 at 19:38
  • The last problem - it won't resize. I've set can shrink, can grow, want grow, but it's still ultra small unless I force preffered size to some constants. When it's -1,-1 - it stays at small(zero, I guess), size – graynk Nov 05 '14 at 19:50

1 Answers1

0

Aaaand I fixed it. Solution: set bytecode and compiler versions to the same one. Solution for the resize problem - set horizontal and vertical aligns to fill. Also had to create and object of that class in createUIComponents()

graynk
  • 131
  • 1
  • 2
  • 17