2013-05-16 4 views
2

나는 애플릿이 (그리고 이것은 SSCCE입니다) :이 GUI의 크기를 어떻게 설정할 수 있습니까?

package tutoringcalculator; 

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

public class TutoringCalculator extends JApplet { 
    private JPanel _root; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Tutoring Calculator"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JApplet applet = new TutoringCalculator(); 
       applet.init(); 

       frame.setContentPane(applet.getContentPane()); 

       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 

       applet.start(); 
      } 
     }); 
    } 

    private JPanel swingContainer; 

    @Override 
    public void init() { 
     swingContainer = new JPanel(new BorderLayout()); 
     add(swingContainer, BorderLayout.CENTER); 
     createScene(); 
     setSize(600, 400); 
    } 

    private void createScene() { 
     JLabel lbl; 
     JTextField txt; 

     _root = new JPanel(new FlowLayout()); 

     // build the session minutes 
     lbl = new JLabel(); 
     lbl.setText("Session Minutes:"); 
     _root.add(lbl); 

     txt = new JTextField(); 
     _root.add(txt); 

     swingContainer.add(_root); 
    } 
} 

내가 600x400으로 크기를 설정하고 싶습니다 -하지만 난 appletsetSize(600, 400), frame, swingContainer_root 아무것도를 발행했습니다 변경.

언급 한 바와 같이

Tutoring Calculator Window

+3

일반적으로 애플릿의 높이는 HTML에 설정됩니다. 귀하의 경우가 '비정형'이기 때문에 좀 더 자세히 살펴 봐야 할 것입니다. –

+0

애플릿은 html 태그의 크기를 가져옵니다 – MadProgrammer

+1

'pack'은 콘텐츠 창의'preferredSize'를 사용하려고합니다 (모든 구성 요소가 배치되었습니다). 이 경우, 프레임 생성 코드 내에서 수동으로 애플릿의 컨텐트 영역의 기본 크기를 설정해야 할 수도 있습니다. 이것은 최상위 컨테이너에 컨트롤을 직접 추가해서는 안되며 대신 필요한 경우 추가/이식 할 수있는 일종의 컨테이너 (예 : JPanel)를 사용해야하는 이유 중 하나입니다. - IMHO – MadProgrammer

답변

5

는, 애플릿는 일반적으로 HTML에 의해 (그것을 강요) 크기를 가져옵니다 :이처럼 보이는 화면을 얻을. 무료 부동 JFrame은 다릅니다. 대신 내부에는 크기를 제안하는 구성 요소가 있으며이 크기는 pack() 시간에 계산됩니다. E.G.

이제 Small Tutoring Calculator

, 나는 당신이 그것을 완료되기 전에이에 훨씬 더 많은 구성 요소를 추가 할 예정 기대하고 것 다음 JTextField의 생성자의 크기를 설정 한 후,이 우리가 볼 것입니다 크기를 더 크게 만들지 만 콘텐츠를 더 크게 만들기위한 다른 팁도 있습니다. 테두리 & 레이아웃 패딩. 여기에 그 중 일부가 어떻게 생겼는지 보여줍니다.

Tutoring Calculator with white space

그럼,이 내려 온다 중 하나)는 GUI가 더 큰 확인 및/또는 레이아웃 생성자 & 국경에 정의 b)의 공백을 추가 할 구성 요소의 전체 무리를 추가합니다.

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

public class TutoringCalculator { 

    private JPanel _root; 
    private JPanel swingContainer; 
    private JLabel lbl; 
    private JTextField txt; 

    TutoringCalculator() { 
     swingContainer = new JPanel(new BorderLayout()); 
     // set an empty border to it 
     swingContainer.setBorder(new EmptyBorder(20,20,20,20)); 

     // suggest a spacing of 20px between components 
     _root = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 20)); 
     swingContainer.add(_root); 

     // add a line border so we can see the bounds of this container 
     _root.setBorder(new LineBorder(Color.BLACK, 1)); 

     // this has a size as needed by the content 
     lbl = new JLabel("Session Minutes:"); 
     _root.add(lbl); 

     // Suggest a size (in characters - 10) for the text field 
     txt = new JTextField(10); 
     _root.add(txt); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Tutoring Calculator"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       TutoringCalculator calc = new TutoringCalculator(); 

       frame.setContentPane(calc.swingContainer); 

       frame.pack(); 
       // much better! 
       frame.setLocationByPlatform(true); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

(전) 중복 애플릿도 제거했습니다. –

관련 문제