2012-11-22 2 views
5

ContentPanel이 600x600 인 JFrame을 만들려고했는데 JFrame을 크기를 조정할 수 없도록하려고했습니다. 이 상자 안에는 프로그램을 실행할 때 모든 것이 일치하는지 확인하기 위해 600x600의 빨간색 사각형이 그려졌습니다. JFrame에 대한 크기 조정 제한 전에, 나는 수행하여 내 JFrame의 크기를 설정합니다JFrame isResizable (false) 크기 조정

getContentPane().setPreferredSize(new Dimension(600,600)); 
pack(); 

을 내가 시작 때 프로그램 내 사각형의 경계는 JFrame의의 크기와 완벽하게 맞습니다. 그러나, 방정식에 isResizable (false)를 추가하면 내 사각형의 오른쪽 가장자리와 내 사각형의 아래쪽 가장자리 사이에 픽셀 버퍼가있는 것처럼 보입니다. 약간의 시행 착오와 함께 isResizable (false)가 높이와 너비에 10 픽셀을 추가하는 것처럼 보입니다. (contentPane에 대한 590x590의 치수 + 추가 10이 내 해결 방법입니다.)

내 질문 이유가 무엇입니까? 나는 여분의 10 픽셀에 대한 문서를 찾을 수없는 것 같습니다.

참고 :이 예외는 또한 크기를 수정하지 않고 JFrame을 작성하여 관찰되었습니다. 사이즈를 변경하지 않고 관찰 가능한 panel/contentPane는 없지만 isResizable (false)를 사용하면 패널/창에서 보이는 부분이 나타납니다.

+0

후 전화 JFrame#pack으로 재설정 할 수 있습니다? –

답변

5

맞습니다. 프레임을 불안정하게 설정하면 높이와 너비에 10 픽셀을 추가하는 것처럼 보입니다. 그러나 이것이 말하자면 원시 피어를 업데이트하는 부작용 인 것 같습니다. ...

당신은 팩을 호출하기 전에 * * 당신이 아닌 크기를 조정할 수 있도록 당신이 확실 호출 JFrame#setResizable

public class TestResizableFrame { 

    public static void main(String[] args) { 
     new TestResizableFrame(); 
    } 

    public TestResizableFrame() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new FixedPane()); 
       frame.setResizable(false); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class FixedPane extends JPanel { 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Dimension size = getSize(); 
      String text = size.width + "x" + size.height; 
      FontMetrics fm = g.getFontMetrics(); 
      int x = (getWidth()- fm.stringWidth(text))/2; 
      int y = ((getHeight() - fm.getHeight())/2) + fm.getAscent(); 
      g.drawString(text, x, y); 
      g.setColor(Color.RED); 
      g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); 
     } 

    } 

}