簡體   English   中英

類構造函數調用另一個

[英]Class constructor calling another

我想有2個構造函數,其中一個調用另一個。

例如:

public class MyButton extends JButton {
private final ImageIcon neutralIcon;
private final ImageIcon pressedIcon;
private final ImageIcon rollOverIcon;

    public MyButton(String n, 
                    String p, 
                    String r, 
                    Dimension d)
    {
        neutralIcon     = new ImageIcon(this.getClass().getResource(n));
        pressedIcon     = new ImageIcon(this.getClass().getResource(p));
        rollOverIcon    = new ImageIcon(this.getClass().getResource(r));
        this.setIcon(neutralIcon);
        this.setPressedIcon(pressedIcon);
        this.setRolloverIcon(rollOverIcon);

        this.setFocusPainted(false);
        this.setContentAreaFilled(false);
        this.setSize(d);
    }

    public MyButton(String n, 
                    String p, 
                    String r)
    {   
        this(n,p,r,this.getPreferredSize()); // COMPILE ERROR
    }

}

我需要獲得preferredSize,但是NetBeans說了類似“在調用超類型構造函數之前無法引用此內容”之類的內容。

我嘗試了“超級”操作,但仍然給我錯誤。

我的朋友告訴我將getPreferredSize放入變量中,但是沒有用。

Dimension d = this.getPreferredSize();
this(n,p,r,d); // COMPILE ERROR

將方法調用更改為常量,因此:

public MyButton(String n, 
                String p, 
                String r)
{   
    this(n,p,r,PREFERRED_SIZE);
}

可以使用Builder模式來解決此問題:

import java.awt.Dimension;

import javax.swing.JButton;


public class MyButton extends JButton {

    private String n;
    private String p;
    private String r;
    private Dimension d;

    private MyButton(){
        super();
    }

    static class MyButtonBuilder{

        private String n;
        private String p;
        private String r;
        private Dimension d;

        public MyButtonBuilder(String n, String p, String r){
            this.n = n;
            this.p = p;
            this.r = r;
        }

        public void setDimension(Dimension d){
            this.d = d;
        }

        public MyButton build(){
            MyButton myButton = new MyButton();
            myButton.n = this.n;
            myButton.p = this.p;
            myButton.r = this.r;
            myButton.d = (myButton.d == null) ? myButton.getPreferredSize():this.d;
            return myButton;
        }
    }

    public static void main(String[] args) {
        MyButtonBuilder builder = new MyButton.MyButtonBuilder("1", "2","3");
        MyButton myButton = builder.build();
    }
}

嘗試這個

 public MyClass(String n, 
                    String p, 
                    String r)
    {   

        this(n,p,r,new Dimension(WIDTH, HEIGHT)); // COMPILE ERROR
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM