2013-02-22 3 views
1

Я создаю игру JApplet MadLibs, но изображение, которое я добавляю, заполняет всю страницу, чтобы блокировать мои ярлыки и JTextFields. Я хочу, чтобы логотип был центрирован в верхней части апплета.Создание игры 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, а на самом деле это, как правило, плохая идея, чтобы переопределить метод рисования любого окна верхнего уровня, если вы не уверены, что вы нужно сделать это, не заботятся или не нуждаются в двойной буферизации, предлагаемой с графикой Swing, и понимайте, что это может повлиять на границы графического интерфейса пользователя и дочерние компоненты.

Почему бы просто не поместить изображение в ImageIcon, а в JLabel, а затем разместить JLabel, где вы хотите отобразить изображение?

Редактировать: вы, кажется, добавляете много компонентов в контентную панель без учета макета. Вы изменили его макет с по умолчанию BorderLayout где-то в коде, который не был отправлен? не

Edit 2 Вы состояние:

Нет у меня нет ... Я до сих пор не дошли до макета. Как мне изменить BorderLayout так, чтобы все было выровнено?

Если вы не изменили макет, то, по всей вероятности, единственное, что вы видите, это последний компонент, добавленный в contentPane, madLib JLabel. То, что вы захотите, - сложить JPanels друг на друга, каждый со своим собственным менеджером макетов. Например, продолжите покидать contentPane с помощью BorderLayout, добавив логотип JLabel с изображением в положение BorderLayout.NORTH или PAGE_START. Затем добавьте большую часть тела GUI в JPanel, на котором размещен BorderLayout.CENTER. Прочитайте различные менеджеры макетов и поиграйте с ними, так как это лучший способ узнать, как их использовать.

+0

Нет, я не ... Я до сих пор не добрался до макета. Как мне изменить BorderLayout так, чтобы все было выровнено? – Acitropy

+0

@ user1913362: см. Редактировать 2. –

+0

Спасибо, сэр .. – Acitropy