2016-10-19 2 views
1

입력에서 결과를 가져 오기 위해 java에 작은 프로그램을 만들었습니다.내 메인에서 JFrame 메서드를 호출 할 수 없습니다.

콘솔에서 작동하지만 지금은 스윙 JFrames를 사용하고 있기 때문에 GUI가 필요합니다.

그게 바로 내가 붙어있는 곳입니다. 폼을 표시하고, 주 코드에서 양식을 생성합니다. 하지만 간단하게 세터와 게터를 사용하여이 양식을 마음대로 조작하고 싶습니다.

폼 패널의 값을 변경하는 설정자를 만들었지 만 주 코드가이 메서드를 인식하지 못합니다.

저는 GUI에 매우 익숙합니다. 그래서 스윙을 사용하기에 적합한 논리가 부족하다는 것을 내기합니다.하지만 누군가가 내가 만든 중대한 실수를 발견 할 정도로 친절하면, 여기에 내 코드가 있습니다. 줄무늬가 있습니다. 아래로 내게 붙어있어 무엇을 맨손으로 :

주의 : 내 편의를 위해 클래스에 직접 내 주요 코드를 넣었어요,하지만 내 메인에서 같은 GUI 클래스를 분리하려고했습니다 결과.

public class mainform { 

public JPanel panel1; 
private JLabel output; 

public void setRes() 
{ 
    output.setText("hello"); 
} 


public static void main(String[] args) throws IOException { 
    JFrame frame = new JFrame("mainform"); 
    frame.setContentPane(new mainform().panel1); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 

    frame.setRes(); // HERE IS WHERE "setRes" won't be recognized as a method... 

} 

} 
+2

자신에게 물어; 어떤 클래스가'frame'이고'setRes' 메쏘드가 어떤 클래스에 속합니까? – flakes

+0

왜 JFrame이 새 클래스'mainform'과 어떻게 든 관련이있을 것으로 기대합니까? –

답변

2

프레임JFrame으로 선언했습니다. 그리고 컴파일러는 할당의 오른쪽 부분에 대해 신경 쓰지 않습니다.

컴파일러의 경우 프레임은 입니다. JFrame입니다. 그리고 JFrames에는 그 방법이 없습니다. 따라서 변수 유형을 메인 폼으로 변경해야합니다. 게다가

class mainform extends JFrame 

: 자바 명명 규칙을 연구하십시오 그리고 물론, 순서 mainform에게 JFrame의를 만들기 위해, 당신은 클래스에게 프레임을 에 있습니다. 클래스 이름은 항상 UpperCase로 이동하므로 "TestFrame"이 훨씬 더 나은 이름이 될 수 있습니다. 또한 메소드 이름에 "약어"를 사용하지 마십시오. 그리고 "setRes()"는 아무 말도하지 않습니다. 당신은 "placeTextOnPanel"또는 유사하게 그것을 더 잘 부른다.

+1

'mainframe'이이 시점에서'JFrame'을 상속해야한다고 추가했습니다. (또한 명명 규칙을 따르기 위해'메인 프레임 '을 깔끔하게 만듭니다.) – SomeJavaGuy

+0

@KevinEsche Correct. 힌트를 가져 주셔서 감사합니다! – GhostCat

2

JFrame의 클래스에는 이러한 방법이 없기 때문에 그래서 당신은 frame.asetRes() 를 호출 할 수 없습니다 ....() 메소드 setRes이 없습니다.

대신 메인 폼 클래스의 인스턴스가 필요합니다.

0

답장을 보내 주셔서 감사합니다. 그래서 루키 한 신비로움, 나는 메인 폼 클래스를 JFrame으로 확장하지 않았다.

다음은 실제로 컴파일되지만 레이블의 텍스트는 변경되지 않습니다. 왜 그런가요?

(또한, 그래 명명 규칙 죄송합니다, 실제로 적절한 이름과 실제 GUI를 코딩하기 전에 가짜 프로젝트에 바이올린 조금 juste 내 interntion이었다.)

<!-- language: java -->  

public class mainform extends JFrame { 


public JPanel panel1; 
private JLabel output; 



public void setRes() 
{ 
    output.setText("hello"); 
} 


public static void main(String[] args) throws IOException { 
    mainform frame = new mainform(); 
    frame.setContentPane(new mainform().panel1); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 


    frame.setRes(); 

} 

} 
관련 문제