创建JApplet MadLibs游戏

时间:2013-02-22 01:54:48

标签: java image swing japplet

我正在创建一个JApplet MadLibs游戏,但我添加的图像填满了整个页面,因此我的标签和JTextField被阻止。我只希望徽标位于applet的顶部。

我的代码:

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);
  }
}

1 个答案:

答案 0 :(得分:3)

不要覆盖JApplet的paint方法,实际上覆盖任何顶级窗口的paint方法通常是个坏主意,除非你确定你需要这样做,不关心或者需要使用Swing图形提供的双缓冲,并了解这可能会影响GUI的边框和子组件。

为什么不简单地将Image放在ImageIcon和JLabel中,然后将JLabel放在你想要显示图像的位置?

编辑:您似乎在不考虑布局的情况下向contentPane添加了许多组件。您是否在代码未发布的某处更改了默认BorderLayout的布局?

编辑2 您声明:

  

不,我没有......我还没有完成布局。我如何更改BorderLayout以便一切都对齐?

如果你没有改变布局,那么你很可能只看到添加到contentPane的最后一个组件,madLib JLabel。你想要的是将JPanels层叠在一起,每个都有自己的布局管理器。例如,继续使用BorderLayout保留contentPane,将徽标JLabel添加到BorderLayout.NORTH或PAGE_START位置的图像。然后将GUI的大部分主体添加到放置BorderLayout.CENTER的JPanel中。阅读各种布局管理器并与它们一起玩,因为这是了解如何使用它们的最佳方式。