2017-03-09 1 views
-2

자신 만의 GUI 라이브러리를 만들려고합니다. 수퍼 클래스에서 약간의 어려움을 겪고 있습니다.이 클래스는 새로운 것이고, 배우기 좋은 소스를 찾을 수 없습니다.). 하지만 모든 구성 요소를 "GGUI"에서 확장 한 다음 쉽게 액세스 할 수 있도록 ArrayList에 저장합니다. 내 문제는 내가 오류가 : "Implicit super constructor GrimGUI.GGUI() 정의되지 않았습니다. 명시 적으로 다른 생성자를 호출해야합니다".목록에서 수퍼 클래스의 원본 클래스에 액세스합니다.

GrimGUI :

Button testScreen; 
Slider firstSlider; 
Slider secondSlider; 
Text firstSliderText; 
Text secondSliderText; 

boolean onHome; 
boolean onTest; 

ArrayList<GGUI> gguiScreen = new ArrayList<GGUI>(); 
void setup() { 
    size(500, 500); 
    onHome = true; 
    background(255); 
    gguiScreen.add(new Button(75, 50, 40, 20)); 

    testScreen = new Button(115, 50, 40, 20); 
    testScreen.cNormal = color(0, 255, 125); 


    firstSlider = new Slider(250, 250, 100); 
    secondSlider = new Slider(250, 280, 100); 

    firstSliderText = new Text(280, 250, "0"); 
    secondSliderText = new Text(280, 280, "0"); 
} 

void draw() { 
    background(255); 
    HomeScreen(); 
    TestScreen(); 

    endFix(); 
} 

void HomeScreen() { 
    if (onHome) { 
    testScreen.Update(); 
    firstSlider.Update(); 
    firstSliderText.content = str(firstSlider.value); 
    firstSliderText.Update(); 
    if (testScreen.released) { 
     onTest = true; 
     onHome = false; 
    } 
    } 
} 

void TestScreen() { 
    if (onTest) { 
    Button trash = (Button)gguiScreen.get(0);//Testing that I can get the only object placed in it to view on screen 
    trash.Update(); 
    secondSlider.Update(); 
    secondSliderText.content = str(secondSlider.value); 
    secondSliderText.Update(); 
    if (trash.WasClicked()) { 
     onTest = false; 
     onHome = true; 
    } 
    } 
} 

버튼 :

class Button extends GGUI { 
    boolean visible, pressed, released, hovering; 
    color cNormal, cPressed, cReleased, cHovering; 
    float x, y, w, h; 

    Button(float X, float Y, float W, float H) { 
    visible = true; 
    x = X; 
    y = Y; 
    w = W; 
    h = H; 
    cNormal = color(75, 75, 75); 
    cPressed = color(100, 100, 100); 
    cReleased = color(125, 125, 125); 
    cHovering = color(175, 175, 175); 
    } 
    Button(boolean visibility, float X, float Y, float W, float H) { 
    visible = visibility; 
    x = X; 
    y = Y; 
    w = W; 
    h = H; 
    cNormal = color(75, 75, 75); 
    cPressed = color(100, 100, 100); 
    cReleased = color(125, 125, 125); 
    cHovering = color(175, 175, 175); 
    } 
    Button(boolean visibility, float X, float Y, float W, float H, color CNORMAL, color CPRESSED) { 
    visible = visibility; 
    x = X; 
    y = Y; 
    w = W; 
    h = H; 
    cNormal = CNORMAL; 
    cPressed = CPRESSED; 
    cReleased = color(125, 125, 125); 
    cHovering = color(175, 175, 175); 
    } 
    Button(boolean visibility, float X, float Y, float W, float H, color CNORMAL, color CPRESSED, color CHOVERING) { 
    visible = visibility; 
    x = X; 
    y = Y; 
    w = W; 
    h = H; 
    cNormal = CNORMAL; 
    cPressed = CPRESSED; 
    cHovering = CHOVERING; 
    cReleased = color(125, 125, 125); 
    } 
    Button(boolean visibility, float X, float Y, float W, float H, color CNORMAL, color CPRESSED, color CHOVERING, color CRELEASED) { 
    visible = visibility; 
    x = X; 
    y = Y; 
    w = W; 
    h = H; 
    cNormal = CNORMAL; 
    cPressed = CPRESSED; 
    cHovering = CHOVERING; 
    cReleased = CRELEASED; 
    } 


    void Update() { 
    CheckState(); 
    if (visible) {//WILL NOT RENDER IF NOT VISIBLE 
     if (pressed && !released) {// IF PRESSED 
     fill(cPressed); 
     } 
     if (released && !pressed) {// IF RELEASED 
     fill(cReleased); 
     } 
     if (hovering && !released && !pressed) {// IF HOVERING 
     fill(cHovering); 
     } 
     if (!hovering && !released && !pressed) {// IF NORMAL/NOT ACTIVE 
     fill(cNormal); 
     } 
     stroke(1); 
     rect(x, y, w, h); 
    } 
    } 

    void CheckState() { 
    hovering = false; 
    released = false; 
    if (mouseX > x && mouseX < x + w) { 
     if (mouseY > y && mouseY < y + h) { 
     hovering = true; 
     } 
    } 
    if (hovering) { 
     if (mPressed) { 
     pressed = true; 
     released = false; 
     } 
     if (mClicked) { 
     released = true; 
     pressed = false; 
     } 
    } else { 
     pressed = false; 
     released = false; 
     hovering = false; 
    } 
    } 

    boolean WasClicked() { 
    return pressed; 
    } 
} 

GGUI :

class GGUI { 
    int x, y; 
    boolean visible; 
    color cBase, cSecondary; 

    GGUI(int _x, int _y, boolean _visible, color _cBase, color _cSecondary) { 
    x = _x; 
    y = _y; 
    visible = _visible; 
    cBase = _cBase; 
    cSecondary = _cSecondary; 
    } 

    void Update() { 
    println("Updated"); 
    } 
} 
+0

이 아주 간단합니다. 수퍼 클래스에서 생성자를 정의하지 않는 한 Java는 컴파일 타임에 생성자를 만듭니다. 또한 super를 직접 호출하지 않으면 각 확장 클래스에서이 생성자에 대한 호출을 생성합니다. 하지만 수퍼 클래스에 여러 생성자와 기본 생성자가 정의되어 있지 않습니다. 적어도 하나 이상의 슈퍼 생성자를 호출해야하지만 Java가 선택할 수는 없으므로 오류가 발생합니다. 슈퍼 클래스에 빈 생성자를 구현하거나 각 로컬 생성자에서 슈퍼 생성자 중 하나를 호출하십시오. – DiabolicWords

답변

1

Implicit super constructor GrimGUI.GGUI() is undefined

그래서 그것을

0을 정의

must explicitly invoke another constructor

은 또는 당신은 버튼을 GGUI 클래스와 같은 float x,y하지 int x,y가 기대하는 것 같다 있기 때문에 이해가되지 않는, super() 생성자

Button(<params...>) { 
    super(<params...>) 
    ... // set more things 
} 

를 호출해야하지만.

이런 식으로 생각해보십시오. GUI가 실제로 픽셀의 일부에 단추를 배치 할 수 있습니까? 당신이 상당히처럼 코드를 줄일 수 있습니다


주 그래서

Button(boolean visibility, float X, float Y, float W, float H, color CNORMAL, color CPRESSED, color CHOVERING, color CRELEASED) { 
    visible = visibility; 
    x = X; 
    y = Y; 
    w = W; 
    h = H; 
    cNormal = CNORMAL; 
    cPressed = CPRESSED; 
    cHovering = CHOVERING; 
    cReleased = CRELEASED; 
    } 

    // For example... 
    Button(boolean visibility, float X, float Y, float W, float H, color CNORMAL, color CPRESSED, color CHOVERING) { 
    // Call the other constructor 
    this(visibility, X, Y, W, H, CNORMAL, CPRESSED, CHOVERING, color(125, 125, 125)); 
    cReleased = color(125, 125, 125); 
    } 
+0

감사합니다. 소스에서이 것을 배웠습니다. 각 생성자 내에서 "super ()"라고 부르지 않아야한다는 것을 완전히 배웠습니다. AT 시작하기 전에 (확실하지는 않지만 작동하는 곳만). 버튼이 제 첫 번째 구성 요소였습니다. 다른 구성 요소처럼 float를 사용할 수 없다는 것을 깨닫지 못하고 float를 int로 변경하는 것을 게으른 것이 었습니다. –

+0

그리고 생성자에서 생성자를 호출 할 수도 있다는 것을 알지 못했습니다. –

+0

다른 생성자를 맨 처음 명령으로 호출해야합니다. 예 –

관련 문제