1

我正在创建一个 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);
  }
}
4

1 回答 1

3

不要重写 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 中。阅读各种布局管理器并与它们一起玩,因为这是学习如何使用它们的最佳方式。

于 2013-02-22T01:56:45.197 回答