paintComponent调用一个变量

时间:2014-02-12 16:59:48

标签: java swing variables paintcomponent

情况如下。我有这个代码。在第二个类中删除变量a时。计划正在运作。它只画了一条线。但我想把一个变量放在“一个”上。然后在第一堂课我要宣布它。然后我想用它。我怎样才能做到这一点。

基本上我可以在第一个类(Grafik3)中将变量a放在NewLabel方法的第二个类中吗?

public class Grafik3 extends  JFrame{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public Grafik3()

    {        add(new YeniLabel("Paint component.............. "));          }

    public static void main(String[] args){

        Grafik3 cer = new Grafik3();

        cer.setTitle("Paint component");
        cer.setLocationRelativeTo(null); // çerçevenin merkezi
        cer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cer.setSize(300,120);
        cer.setVisible(true);

    }

}


class YeniLabel extends JLabel {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public YeniLabel(String s){super(s); }

    protected void paintComponent(Graphics g,int a){

        super.paintComponent(g);
        g.drawLine(a, 0, 70, 70);

    }


}

2 个答案:

答案 0 :(得分:0)

如果你这样做,你就不再覆盖这个功能了。您正在创建重载。这不是你想要的。而是尝试使int a成为一个类成员,并在呈现组件之前将变量设置为适当的值。

它不起作用的原因正是因为您为该方法创建了一个重载。这意味着在渲染时不使用此方法。而是使用原始的paintComponent(Graphics)方法。用于渲染的调用始终 paintComponent(Graphics)。因此,如果您创建一个具有相同名称但不同参数的原始方法旁边的方法(称为一个重载),此方法不会替换原始方法,而只是一个新方法,它们只是同时存在。

答案 1 :(得分:0)

调用getter函数。

在你的主要课程中:

YeniLabel yeni = new YeniLabel("Paint component.............. ");
add(yeni);

//whenever you want to get it:
int a = yeni.getA();

在你的YenniLabel课程中:

class YeniLabel extends JLabel {


    int a = 25;

    public YeniLabel(String s){super(s); }

    public void getA(){
       return a;
    }

    protected void paintComponent(Graphics g){

        super.paintComponent(g);
        g.drawLine(a, 0, 70, 70);

    }
}