2017-12-28 22 views
-1
public class AddMult extends JFrame { 
    public AddMult() { 
    setSize(600, 600); 

    txtEnterNum = new JTextField(); 
    txtEnterNum.setSize(100,50); 
    lblEnterNum.setLocation(100, 150); 
    add(txtEnterNum); 
    txtEnterNum.setVisible(true); 


    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

} 양식과 JTextField를 작성하려고했습니다. 하지만 문제는 내 위치와 크기가 작동하지 않는다는 것입니다. TextField가 전체 양식을 채 웁니다. 어떻게 해결할 수 있습니까?JTextField 크기를 변경할 수 없습니다.

+0

이전에 존재했던 txtEnterNum을 제거한 적이 있습니까? –

+0

현재 허용되는 대답은 텍스트 필드의 크기와 위치를 지정하는 완전한 잘못된 방법입니다. 나는 (그리고 많은 다른 사람들) 당신에게 그렇게하기위한 올바른 조언을 해 줄 수 있지만, 먼저 우리는 전체 GUI (다른 컴포넌트 및 레이블과 함께)가 어떻게 나타나야하는지 ** 알 필요가있다. ASCII 아트 또는 GUI의 * 의도 된 * 레이아웃의 간단한 그림을 최소한의 크기로 제공하고, 크기를 조정할 수 있으면 더 많은 너비와 높이로 추가 공간을 사용하는 방법을 보여줍니다. –

+0

BTW 1) 높이가 50 인 글꼴은 큰 글꼴이 아닌 한 텍스트 필드보다 일반적으로 더 큽니다. 2)'txtEnterNum'은 그 이름의 'num num'부분이'SpinnerNumberModel'을 가진'JSpinner'가 더 나은 프로그래밍 접근법이 될 수 있고 또한 사용자에게 더 쉽다는 것을 암시합니다. –

답변

-1

크기가 JFrame의 기본 레이아웃 (FlowLayout)으로 인해 "작동하지 않습니다". 이 레이아웃을 사용하면 개체의 크기 나 위치를 변경할 수 없습니다.

frame() { 

    setSize(600, 600); 
    setLayout(new LayoutManager() {...} 

    txtEnterNum = new JTextField(); 
    txtEnterNum.setSize(100, 50); 
    setLocation(100, 150); 
    add(txtEnterNum); 
    txtEnterNum.setVisible(true); 


    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
: 당신은 JFrame의 생성자의 레이아웃을 설정해야

setLayout(new LayoutManager() { 
     @Override 
     public void addLayoutComponent(String name, Component comp) { 



     } 

     @Override 
     public void removeLayoutComponent(Component comp) { 

     } 

     @Override 
     public Dimension preferredLayoutSize(Container parent) { 
      return null; 
     } 

     @Override 
     public Dimension minimumLayoutSize(Container parent) { 
      return null; 
     } 

     @Override 
     public void layoutContainer(Container parent) { 

     public void layoutContainer(Container parent) { 

      float modifierx = Toolkit.getDefaultToolkit().getScreenSize().width/100; 

      float Sizemodifier = Toolkit.getDefaultToolkit().getScreenSize().height/50; 

      float modifiery = Toolkit.getDefaultToolkit().getScreenSize().height/150; 

      int x=(int)(Toolkit.getDefaultToolkit().getScreenSize().width/modifierx); 

      int y=(int)(Toolkit.getDefaultToolkit().getScreenSize().height/modifiery); 

      int height =(int)(Toolkit.getDefaultToolkit().getScreenSize().height/Sizemodifier); 

      int DX =(int)(Toolkit.getDefaultToolkit().getScreenSize().width/modifierx); 

      int DY =(int)(Toolkit.getDefaultToolkit().getScreenSize().height/modifiery); 

      for(int i = 0; i<parent.getComponentCount();i++){ 

       if(i%2==0){ 

        parent.getComponent(i).setBounds(x,y,x,height); 

        x+= DX; 

       }else{ 

        parent.getComponent(i).setBounds(x,y,x,height); 

        x=Toolkit.getDefaultToolkit().getScreenSize().width/100; 

        y+=DY; 

       } 

      } 
     } 


    }); 

: 자신의 레이아웃을 사용하는 것을 시도하십시오 (당신의 구성 요소의 크기와 위치를 수정하기 위해 x와 y 값을 수정)

+0

편집은 '널 (null)'레이아웃의 모든 기존 문제점을 취한 다음이를 사용자 정의 레이아웃으로 래핑하는 방식을 설명합니다. 그것은 개선되지 않습니다. 실제로, 그것은 마찬가지로 나쁘다. 그러나 일을하는 더 튼튼한 방법이라고 생각하는 것에 초보자를 속일지도 모르지만, 그것은 뒤로 물러서있다. 이 커스텀 레이아웃 매니저는 저의 최초 코멘트의 첫 문장에 언급 된 모든 요소들을 어떻게 설명하고 조정합니까? (Spoiler : 그렇지 않다.) –

+0

@AndrewThompson 코드가 각 화면 크기에 맞게 변경되었다. 그것을 확인하고 그것을 향상시킬 방법이 있다고 생각하면 저에게 말해주십시오. –

관련 문제