【问题标题】:Creating a JApplet MadLibs game创建一个 Applet Mad Libs 游戏
【发布时间】:2013-02-22 01:54:47
【问题描述】:

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

我的代码:

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

【问题讨论】:

    标签: java image swing japplet


    【解决方案1】:

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

    为什么不简单地将图像放在 ImageIcon 和 JLabel 中,然后将 JLabel 放在您希望显示图像的位置?

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

    编辑 2 你说:

    不,我还没有……我还没有了解布局。如何更改 BorderLayout 以使所有内容都对齐?

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

    【讨论】:

    • 不,我还没有……我还没有进入布局。我将如何更改 BorderLayout 以使所有内容都对齐?
    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2021-02-28
    相关资源
    最近更新 更多