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 メソッドをオーバーライドするのは、実際には、これを行う必要があるかどうか、気にしないか、double を必要としない限り、通常は悪い考えです。 Swing グラフィックスで提供されるバッファリングと、これが GUI の境界線と子コンポーネントに影響を与える可能性があることを理解してください。

Image を ImageIcon に入れ、それを JLabel に入れ、イメージを表示したい場所に JLabel を配置してみませんか?

編集:レイアウトに関係なく、多くのコンポーネントを contentPane に追加しているようです。投稿されていないコードのどこかで、デフォルトの BorderLayout からレイアウトを変更しましたか?

編集2 あなたは次のように述べています:

いいえ、そうではありません...まだレイアウトにたどり着いていません。すべてが整列するように BorderLayout を変更するにはどうすればよいですか?

レイアウトを変更していない場合、表示されるのはおそらく contentPane に最後に追加されたコンポーネント、madLib JLabel だけです。必要なのは、それぞれが独自のレイアウト マネージャーを持つ JPanel を互いの上にレイヤー化することです。たとえば、引き続き contentPane を BorderLayout で残し、BorderLayout.NORTH または PAGE_START の位置に画像を含むロゴ JLabel を追加します。次に、GUI の本体の大部分を、BorderLayout.CENTER に配置された JPanel に追加します。さまざまなレイアウト マネージャーを読んで、それらを試してみることが、それらの使用方法を学ぶための最良の方法です。

于 2013-02-22T01:56:45.197 に答える