2013-02-22 1 views
1

JApplet MadLibs 게임을 만들고 있지만 추가 한 이미지가 전체 페이지를 채워서 내 레이블 및 JTextField가 차단됩니다. 로고 만 애플릿의 맨 위에 배치하기를 원합니다.JApplet MadLibs 게임 만들기

내 코드 :

import java.awt.*; 
import javax.swing.*; 
import javax.swing.JApplet; 
import java.awt.event.*; 
import java.net.URL; 

public class MadLibs extends JApplet implements ActionListener { 
    JLabel label1 = new JLabel("A Proper First Name: "); 
    JLabel label2 = new JLabel("A Pet: "); 
    JLabel label3 = new JLabel("A Personal Attribute: "); 
    JLabel label4 = new JLabel("An Adjective: "); 
    JLabel label5 = new JLabel("A Verb: "); 
    JTextField jtf1 = new JTextField(); 
    JTextField jtf2 = new JTextField(); 
    JTextField jtf3 = new JTextField(); 
    JTextField jtf4 = new JTextField(); 
    JTextField jtf5 = new JTextField(); 
    JButton jb = new JButton("Create!"); 
    JLabel madlib = new JLabel(""); 
    Container con = getContentPane(); 
    private Image image; 


    public void init() { 
    image = getImage(getDocumentBase(), "MadLibsLogo.gif"); 
    jb.addActionListener(this); 
    con.add(label1); 
    con.add(jtf1); 
    con.add(label2); 
    con.add(jtf2); 
    con.add(label3); 
    con.add(jtf3); 
    con.add(label4); 
    con.add(jtf4); 
    con.add(label5); 
    con.add(jtf5); 
    con.add(jb); 
    con.add(madlib); 
    } 
    public void actionPerformed(ActionEvent e) { 
    madlib.setText(jtf1.getText() + " had a little " + jtf2.getText() + "/nIts " + jtf3.getText() + " was " + jtf4.getText() + 
     " as snow/nAnd everywhere that " + jtf1.getText() + jtf5.getText() + "/nThe " + jtf2.getText() + " was sure to go."); 
    repaint(); 
    } 
    public void paint(Graphics g) 
    { 
    g.drawImage(image, 0, 0, 229, 73, this); 
    } 
} 

답변

3

JApplet에의 페인트 메소드를 오버라이드 (override), 사실 일반적으로 당신이 확실하지 않는 한 최상위 윈도우의 페인트 메소드를 오버라이드 (override)하는 나쁜 생각하지 마십시오 그 스윙 그래픽에서 제공되는 이중 버퍼링을 신경 쓰지 않아도되고, GUI의 테두리와 하위 구성 요소에 영향을 줄 수 있다는 것을 이해해야합니다.

이미지를 ImageIcon과 JLabel에 넣은 다음 이미지를 표시하려는 위치에 JLabel을 놓는 것은 어떻습니까?

편집 : 레이아웃과 상관없이 contentPane에 많은 구성 요소를 추가하는 것처럼 보입니다. 배치되지 않은 코드의 기본 BorderLayout에서 레이아웃을 변경 했습니까?

편집 2 당신의 상태 :

내가하지 않은 아니 ... 난 아직 레이아웃에 입수하지 않았다. 모든 것이 정렬되도록 BorderLayout을 어떻게 변경합니까?

레이아웃을 변경하지 않았다면 볼 수있는 것은 마지막으로 contentPane 인 madLib JLabel에 추가 된 구성 요소뿐입니다. JPanel을 각각의 레이아웃 위에 레이어하는 것이 좋습니다. 각각의 레이어는 자체 레이아웃 관리자를 사용합니다. 예를 들어, BorderLayout.NORTH 또는 PAGE_START 위치에 이미지와 함께 로고 JLabel을 추가하여 contentPane을 BorderLayout으로 계속 두십시오. 그런 다음 BorderLayout.CENTER에 배치 된 JPanel에 대부분의 GUI 본문을 추가합니다. 다양한 레이아웃 관리자를 읽어보고 사용법을 배우는 가장 좋은 방법이기 때문에 함께 사용하십시오.

+0

아니요 ... 아직 레이아웃에 익숙하지 않았습니다. 모든 것이 정렬되도록 BorderLayout을 어떻게 변경합니까? – Acitropy

+0

@ user1913362 : 편집 2를 참조하십시오. –

+0

감사합니다. – Acitropy