我正在创建一个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);
}
}
答案 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中。阅读各种布局管理器并与它们一起玩,因为这是了解如何使用它们的最佳方式。