Не могу получить доступ к общедоступному методу / переменной JPanel и не может получить доступ из другого открытого метода / переменной Jpanel - PullRequest
0 голосов
/ 28 мая 2011
package client;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class YootPanel extends JPanel
{

    private ImageIcon bgIcon;
    public JTextArea textBox;
    public ClientUI clientUI;
    public static final int HORSE_HEIGHT = 25;
    public static final int HORSE_WIDTH = 40;
    public int r1,r2,r3,r4;
    public int b1,b2,b3,b4;
    YootPanelPlot plot;

    public YootPanel(ClientUI clientUI)
    {
        super();    
        init_rest();
        init_bg();
            plot =  = new YootPanelPlot();
        this.setVisible(true);
        this.clientUI = clientUI;
    }

    private void init_bg()
    {
        java.net.URL imgUrl = ClientUI.class.getResource("../images/images/background.png");
        bgIcon = new ImageIcon(imgUrl);
    }

    protected void paintComponent(Graphics g)
    {
        try
        {
            g.drawImage(bgIcon.getImage(), -20, 0, null);
            super.paintComponent(g);
        } catch (Exception e)
        {


        set_Loc();


        g.setColor(Color.RED);
        g.fillOval(plot.plot[0][r1], plot.plot[1][r1], HORSE_WIDTH, HORSE_HEIGHT);
        g.fillOval(plot.plot[0][r2], plot.plot[1][r2], HORSE_WIDTH, HORSE_HEIGHT);
        g.fillOval(plot.plot[0][r3], plot.plot[1][r3], HORSE_WIDTH, HORSE_HEIGHT);
        g.fillOval(plot.plot[0][r4], plot.plot[1][r4], HORSE_WIDTH, HORSE_HEIGHT);
        g.setColor(Color.BLUE);
        g.fillOval(plot.plot[0][b1], plot.plot[1][b1], HORSE_WIDTH, HORSE_HEIGHT);
        g.fillOval(plot.plot[0][b2], plot.plot[1][b2], HORSE_WIDTH, HORSE_HEIGHT);
        g.fillOval(plot.plot[0][b3], plot.plot[1][b3], HORSE_WIDTH, HORSE_HEIGHT);
        g.fillOval(plot.plot[0][b4], plot.plot[1][b4], HORSE_WIDTH, HORSE_HEIGHT);
        System.err.println("Paint");
        }
    }

    public void paint(Graphics g)
    {
        super.paint(g);

    }

private void init_rest()
{
        this.setBorder(javax.swing.BorderFactory.createTitledBorder("Yoot Map"));
        this.setFocusable(false);
        this.setMinimumSize(new java.awt.Dimension(670, 400));
        this.setName("map"); // NOI18N
        this.setOpaque(false);
        this.setPreferredSize(new java.awt.Dimension(630, 400));
        this.setSize(new java.awt.Dimension(630, 400));
        this.setVerifyInputWhenFocusTarget(false);

        org.jdesktop.layout.GroupLayout yootMapLayout = new org.jdesktop.layout.GroupLayout(this);
        this.setLayout(yootMapLayout);
        yootMapLayout.setHorizontalGroup(
        yootMapLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(0, 658, Short.MAX_VALUE));
yootMapLayout.setVerticalGroup(
        yootMapLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(0, 442, Short.MAX_VALUE));
}

    public void set_Loc()
    {
        try
        {
            System.err.println("......"+clientUI.client.c2.blueHorseLocation[0]);
            r1 = clientUI.client.c2.getRed(0);
            r2 = clientUI.client.c2.getRed(1);
            r3 = clientUI.client.c2.getRed(2);
            r4 = clientUI.client.c2.getRed(3);
            b1 = clientUI.client.c2.blueHorseLocation[0];
            b2 = clientUI.client.c2.blueHorseLocation[1];
            b3 = clientUI.client.c2.blueHorseLocation[2];
            b4 = clientUI.client.c2.blueHorseLocation[3];
        } catch (NullPointerException e)
        {
             e.printStackTrace();
        }
    }
}

То, что я пытаюсь сделать, - это получать обновления о том, куда поставить рисование овалов.Однако последняя часть r1 = clientUI.client.c2.getRed (1);генерирует исключение NullPointerException

Так что я попытался получить доступ к этим общедоступным переменным классов r1, r2 ... и т. д., однако я также не смог получить доступ к этим общедоступным переменным ....

Есть ли способ, которым яможно изменить эти переменные так, чтобы я мог перемещать овалы по мере получения новых обновлений координат?

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Ладно, я был глуп, и сделал неправильную работу при создании объекта ... Я должен был использовать

YootPanel object = new YootPanel();

, но вместо этого я использовал

JPanel object = new YootPanel();

...Не удивительно, что я не смог получить доступ к методам, которые я создал в классе YootPanel ....

Спасибо всем за все ваши ответы!

1 голос
/ 28 мая 2011

Не используйте публичные переменные.

Определите методы для обновления значений любого свойства, которое вы хотите изменить.

Кроме того, пользовательское рисование выполняется путем переопределения метода paintComponent ().Вы не должны переопределять метод paint ().

...