2013-03-16 1 views
0

필자는 프로그램 할당을 위해 GUI를 만들려고합니다. 기본적으로 왼쪽에 두 개의 버튼이 있고 오른쪽에서 다시 시작하고 패널은 맨 아래에 있습니다.requestFocusInWindow (boolean)는 JComponent에서 액세스를 보호합니까?

Error: requestFocusInWindow(boolean) has protected access in JComponent

내가 전에 한 번이로 실행하고 나는 그 수단 중 하나가 내가 주위를 봤 좋은 설명을 않고 아무것도 그렇게 찾을 수 없습니다 무엇을 이해하지 못하는 것 같은 느낌 :하지만 말해 아마 바보 같을 것 같아.

import javax.swing.*; 
import java.awt.*; 

public class PendulumWindow { 

    protected JFrame pendFrame; 
    protected JPanel pendPanel; 
    protected JButton resume; 
    protected final int SIZE_X = 500; 
    protected final int SIZE_Y = 450; 
    protected Dimension pendPanSize = new Dimension(SIZE_X, SIZE_Y); 

    public PendulumWindow() { 

    } 

    public PendulumWindow(String s) { 
     makePanel(); 
     makeFrame(); 
    } 

    public void makePanel() { 
     pendPanel = new JPanel(); 

     pendPanel.setPreferredSize(pendPanSize); 
     pendPanel.setFocusable(true); 
     pendPanel.requestFocusInWindow(true); 
     pendPanel.setBackground(Color.BLUE); 
    } 

    public void makeFrame() { 
     pendFrame = new JFrame("Pendulum"); 
     start = new JButton("start"); 
     resume = new JButton("resume"); 

     //---------- FRAME PROPERTIES ----------// 

     pendFrame.setSize(500,500); 
     pendFrame.setVisible(true); 
     pendFrame.setResizable(true); 
     pendFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //---------- ADD ELEMENTS TO FRAME ----------// 

     pendFrame.setLayout(new BorderLayout()); 
     pendFrame.add(start, BorderLayout.WEST); 
     pendFrame.add(resume, BorderLayout.EAST); 
     // pendFrame.add(pendPanel, BorderLayout.SOUTH); 
    } 

    public static void main(String[] args) { 
     PendulumWindow window = new PendulumWindow("Pendulum"); 
    } 
} 
+0

pendPanel.requestFocusInWindow()를 호출하는 것이 잘못된 이유는 무엇입니까? – MadProgrammer

+0

는 Reimeus가 제안한 것과 정확히 일치하는 것입니다. public requestFocusInWindow()가 있다는 것을 알지 못했습니다. 내가 문서를 보았을 때 그것을 간과해야만합니다. – SavgStorm

답변

3

워드 프로세서는 requestFocusInWindow(boolean) 그렇게 만 JComponent의 서브 클래스에서 호출 할 수 protected 것을 보여 여기

내가 GUI를 구성하기 위해 사용하고있는 코드입니다. 대신 공개적으로 액세스 할 수있는 requestFocusInWindow을 사용해야합니다.

+0

이것은 매우 도움이되었습니다. 필자는 문서를 볼 때 그 public requestFocusInWindow()를 놓쳤을 것입니다. 고맙습니다! – SavgStorm

+0

AFAIK 임시 플래그는 [포커스 서브 시스템] (http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html)에서 사용합니다. 'permanentFocusOwner'와 같은 필드는이 플래그에 따라 설정됩니다. 일반적으로 Swing은 이것을 처리하고'public void requestFocusInWindow()' – Reimeus

0

requestFocusInWindow()이 아닌 requestFocus()을 사용하십시오.

+0

-1을 사용하여 requestFocus() 메소드에 대한 API 문서를 읽는다. 그것은 당신이 requestFocusInWindow() 메소드를 사용해야 함을 암시합니다. – camickr

+0

@camicr : 당신은 그것이 불리는 것과 구별하지 않습니다. "SavgStorm"은 구성 요소의 외부에서 호출하려고합니다. OUTSIDE에서 보호 된 메서드를 호출 할 수 없습니다. – mentallurg

+0

두 가지 메서드를 섞어 사용하지 마십시오. 매개 변수가없는 requestFocusInWindow()는 public입니다. 호출 할 수 있습니다. requestFocusInWindow (boolean temporary)는 보호되어 있으므로 외부에서 호출 할 수 없습니다. 물론, 기술적으로 JPanel을 서브 클래스 화하고 public 메소드를 통해 requestFocusInWindow (부울 임시)를 호출하거나 requestFocusInWindow (부울 임시)를 public으로 만들 수 있습니다. 그러나 그것을하기 전에 먼저 무엇을 성취하고자하는지 생각하십시오. – mentallurg