NullPointerExeption

0

Ktoś doradzi co jest źle ?



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

public class Figures extends JFrame implements ActionListener {

    //Surface surface;
    public JMenuBar menuBar;
    public JMenu mMenu,mDrawing;
    public JMenuItem mWheel,mSquare,mPolygon,mEdit,mInfo,mExit;
    public JLabel jX,jY,jHeight,jWidth;
    public  JTextField tX,tY,tHeight,tWidth;

    public Figures() {

        initUI();
    }

    //private void initUI() {
        public void initUI() {


        setTitle("Figures");                                   //Paramaetry okienka
        setSize(800, 600);
        setResizable(false);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new Surface());

        jX = new JLabel("X:");                              //Tworzę etykiety
        jY = new JLabel("Y:");
        jHeight = new JLabel("Height:");
        jWidth = new JLabel("Width:");

        jX.setBounds(210,500,40,30);               //Ustawiam etykiety
        jY.setBounds(280,500,40,30);
        jWidth.setBounds(350,500,80,30);
        jHeight.setBounds(450,500,80,30);
        add(jX);add(jY);add(jWidth);add(jHeight);              //Dodaje etykiety

        tX = new JTextField("");                            //Tworzę pola tekstowe
        tY = new JTextField("");
        tHeight = new JTextField("");
        tWidth = new JTextField("");

        tX.setBounds(230,500,40,30);              //Ustawiam pola tekstowe
        tY.setBounds(300,500,40,30);
        tWidth.setBounds(400,500,40,30);
        tHeight.setBounds(510,500,40,30);
        add(tX);add(tY);add(tWidth);add(tHeight);             //Dodaje pola tekstowe

        menuBar = new JMenuBar();                             //Tworzę pasek menu
        setJMenuBar(menuBar);
        mMenu = new JMenu("Menu");
        menuBar.add(mMenu);

        mDrawing = new JMenu("Drawing");                   //Tworzę pozycje w menu
        mEdit = new JMenuItem("Edit");
        mExit = new JMenuItem("Exit");
        mInfo = new JMenuItem("Information");
        mPolygon = new JMenuItem("Polygon");
        mSquare = new JMenuItem("Square");
        mWheel = new JMenuItem("Wheel");

        mMenu.add(mDrawing);                                  //Dodaje pozycje do menu
        mMenu.addSeparator();
        mMenu.add(mEdit);
        mMenu.addSeparator();
        mMenu.add(mInfo);
        mMenu.addSeparator();
        mMenu.add(mExit);


        mDrawing.add(mPolygon);
        mDrawing.addSeparator();
        mDrawing.add(mSquare);
        mDrawing.addSeparator();
        mDrawing.add(mWheel);

        mPolygon.addActionListener(this);                    //Dodaje słuchaczy
        mWheel.addActionListener(this);
        mSquare.addActionListener(this);
        mEdit.addActionListener(this);
        mInfo.addActionListener(this);
        mExit.addActionListener(this);

    }

    public static void main(String[] args) {

        Figures ex = new Figures();
        ex.setVisible(true);

    }
    public void Test(){System.out.println("dupa");}


    @Override
    public void actionPerformed(ActionEvent ev) {

        Object souorce = ev.getSource();

        if(souorce == mEdit){
            System.out.println("Edit");
        }

        else if(souorce == mWheel){

        }
        else if(souorce == mInfo){
        }
        else if(souorce == mExit){
            dispose();
            System.exit(0);
        }
    }

}


import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

public class Surface extends JPanel{
    Figures figures;
    private ZRectangle zrect;
    private ZEllipse zell;

    public Surface() {
        initUI();
    }

    public void initUI() {


        setBounds(0,0,800,500);
        MovingAdapter ma = new MovingAdapter();
        addMouseMotionListener(ma);
        addMouseListener(ma);
        addMouseWheelListener(new ScaleHandler());
       figures.tX.setText("coś");               // <------------------------------- tu mi pokazuje NullPionter 
        //figures.Test();

        zrect = new ZRectangle(50, 50, 50, 50);
        zell = new ZEllipse(150, 70, 80, 80);
    }

    private void doDrawing(Graphics g) {

        Graphics2D g2d = (Graphics2D)g;

        Font font = new Font("Serif", Font.BOLD, 40);
        g2d.setFont(font);

        g2d.setPaint(new Color(141, 40, 200));
        g2d.fill(zrect);
        g2d.setPaint(new Color(5, 98, 100));
        g2d.fill(zell);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        doDrawing(g);
    }
}
1

Nigdzie nie przypisujesz nic do pola figures w klasie Surface. Jeśli chcesz z poziomu Surface mieć wpływ na Figures, to może w trakcie tworzenia Surface przekaż do konstruktora wartość this i przypisz ją do tego pola.

0

Mógłbyś napisać mi ten kawałek kodu?

0

Zmieniasz add(new Surface()); na add(new Surface(this));, a konstruktor Surface zmieniasz na

    public Surface(Figures figures) {
        this.figures = figures;
        initUI();
    }
 
0

No tak też robiłem i myślałem że już zgłupiałem bo tak mi nie działa

Exception in thread "main" java.lang.NullPointerException
at Surface.initUI(Surface.java:28)
at Surface.<init>(Surface.java:17)
at Figures.initUI(Figures.java:31)
at Figures.<init>(Figures.java:19)
at Figures.main(Figures.java:94)

0

Pokaż resztę kodu, zwłaszcza klasę MovingAdapter.

0

Zależność cykliczna, usuń Figures z Surface, a set text na figures zrób w innym miejscu (może w init w figures?)

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