2013-06-21 12 views
1

JPanel 구성 요소가 다른 구성 요소에 표시되지 않기 때문에 도움이 필요합니다. 나는 그 레이아웃을 가지고 작업 했었기 때문에 약간의 경험이 있었지만 그 경우에는 여전히 문제가 있습니다. 다른 레이아웃 관리자를 사용하려면 대답하지 마십시오. 내 프로젝트의 대부분은 GridBagLayout을 기반으로합니다.GridBagLayout에 JPanel 구성 요소가 표시되지 않습니다.

그래서 내 부모 컨테이너입니다 :

public class MainArea extends WorkArea 
{ 
private static final long serialVersionUID = 1L; 
private GridBagConstraints gbc; 
private LogoPanel logo; 

public MainArea() 
{ 
    gbc = new GridBagConstraints(); 
    logo = new LogoPanel(); 
    JTextField tf = new JTextField(20); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    add(logo,gbc); 

    gbc.gridx = 0; 
    gbc.gridy = 1; 
    add(tf,gbc); 
} 
} 

레이아웃 매니저가 Workarea에 클래스에 설정하고 그것을 수행해야합니다 권리입니다. JTextField 테스트 용으로 만 추가되었으며 로고와 달리 제대로 표시됩니다. 여기에 로고 코드 :

public class LogoPanel extends JPanel 
{ 
private BufferedImage image; 

public LogoPanel() 
{ 
    File imageFile = new File("images/Logo.jpg"); 
    try 
    { 
     image = ImageIO.read(imageFile); 
    } 
    catch (IOException e) 
    { 
     System.err.println("Blad odczytu logo"); 
     e.printStackTrace(); 
    } 
} 

@Override 
public void paintComponent(Graphics g) 
{ 
    Graphics2D g2d = (Graphics2D) g; 
    Screen screen = Screen.getInstance(); 
    g2d.drawImage(image, screen.getScreenWidth()/2-200, screen.getScreenHeight()/2-100, this); 
} 
} 

도와주세요. 나는 여기서 무엇이 잘못 될지 모른다. 나 또한 다시 그리기 메서드를 시도하고 추가 한 후에 유효성을 검사했지만 결과가 없습니다.

+0

'super.paintComponent (g)'를 (를) 호출하는 위치는 어디입니까? 당신은 이미지를 잘로드 할 수 있는지, 그렇지 않다면,이 스레드에 관해서, 어떻게 [자바 프로젝트에 이미지 추가하기]를 보아주세요 (http://stackoverflow.com/a/9866659/1057230) –

답변

0

는 GridBagLayout에이 패널을 만들기 위해 얼마나 큰 알 수 있도록

+0

나는 LogoPanel에 setPreferredSize를 사용하여이를 해결했다. 다른 레이아웃을 사용하면 필요하지 않기 때문에 이상합니다. 조언을위한 Thx – user2374573

2

이 LogoPanel 클래스에 public Dimension getPreferredSize() 을 무시하려고 로고 패널에 setVisible(true)를 호출하려고합니다.

@nIcE cOw가 지적한대로 paintComponent() 메서드에서 항상 첫 번째 줄로 super.paintComponent(g)을 호출하십시오.

관련 문제