1

私は Java アプレット プログラミングと Java 全般に不慣れですが、C# と C++ は得意です。とにかく、JTextField、JButton、および JLabel を使用して単純な電卓を作成しています。しかし、JButton と JTextField が画面全体を占めており、最も奇妙なことは、サイズを設定したのにサイズが設定されていないことです。それで、私は何を間違っていますか?これが以下のコードです。誰かが私を助けてください。回答をいただければ幸いです。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import javax.swing.JApplet;
import java.awt.*;
import javax.swing.JButton;
import javax.swing.JTextField;
/**
 *
 * @author Danny
 */
public class Applet extends JApplet {

    private JButton button1;
    private JTextField textBox1;
    @Override
    public void paint(Graphics g)
    {
        g.setFont(new Font("Courier", Font.PLAIN, 12));
        g.drawString("Enter a number: ", 36, 36);
        return;
    }

    /**
     * Initialization method that will be called after the applet is loaded
     * into the browser.
     */
    @Override
    public void init() {
          button1 = new JButton("Calculate");
          textBox1 = new JTextField("number");
          textBox1.setFont(new Font("Courier", Font.PLAIN, 12));
          textBox1.setSize(100, 36);
          button1.setSize(100, 36);
          textBox1.setLocation(new Point(36, 76));
          button1.setLocation(new Point(36, 70));
          Container c = getContentPane();
          c.add(button1);
          c.add(textBox1);
          c.setBackground(Color.gray);
    }
    // TODO overwrite start(), stop() and destroy() methods
}
4

2 に答える 2

4

ここでレイアウトを考慮する必要があります。JApplet の contentPane はデフォルトで BorderLayout を使用します。コンポーネントを追加する場所を指定する 2 番目のパラメーターを指定せずに BorderLayout にコンポーネントを追加すると、BorderLayout.CENTER が追加され、できるだけ多くのスペースが埋められます。これを解決するための鍵は、レイアウト マネージャーについて可能な限り学び、この情報を活用することです。この情報は、次の場所にあります:レイアウト マネージャーのビジュアル ガイド

複雑でありながら管理しやすいレイアウトを実現するために、それぞれが独自のコーダーフレンドリーなレイアウトマネージャーを使用して JPanel をネストすることが多いことに注意してください。

例えば、

import java.awt.*;
import javax.swing.*;

public class Applet extends JApplet {

   private JButton button1;
   private JTextField textBox1;

   @Override
   public void init() {
      button1 = new JButton("Calculate");
      textBox1 = new JTextField("number");
      textBox1.setFont(new Font("Courier", Font.PLAIN, 12));
      JPanel myPanel = new JPanel(); // JPanel uses FlowLayout by default
      myPanel.add(new JLabel("Enter a number: "));
      myPanel.add(textBox1);
      myPanel.add(button1);
      myPanel.setBackground(Color.gray);

      getContentPane().add(myPanel, BorderLayout.CENTER);
   }

}

setSize は通常、ほとんどのレイアウト マネージャーで無視されることにも注意してください。代わりに、preferredSize は通常受け入れられますが、代わりに、コンポーネント自体がコンテンツまたは他のプロパティ (JTextArea の行と列、JTextField の列、または文字列テキスト) に基づいて preferredSize を設定する必要があるため、これを設定することは避ける必要があります。 JLabel の場合)。

于 2011-10-05T20:33:44.563 に答える
2

Swing クラスがどのように機能するかを理解するのは非常に難しいため、ご苦労をおかけします。

JApplet使用しているフレームにContainerは、デフォルトの を使用している があることを考慮する必要がLayoutありますBorderLayout。この場合、追加するコンテンツはすべてJApplet(HTML で設定する可能性が高い) のサイズにスナップします。

次のことを試してください。

public void init() {
      setLayout(new FlowLayout());
      button1 = new JButton("Calculate");
      textBox1 = new JTextField("number");
      textBox1.setFont(new Font("Courier", Font.PLAIN, 12));
      textBox1.setSize(100, 36);
      button1.setSize(100, 36);

      JPanel contentPanel = new JPanel();
      contentPanel.add(button1);
      contentPanel.add(textBox1);

      getContentPane().add(contentPanel );
      c.setBackground(Color.gray);
}

私が使用する良い経験則は、親コンテナーに追加する前に、すべてのComponentオブジェクトを独自のオブジェクトに固定することです。これにより、固有の Swing レイアウトの奇妙さを回避できます。JPanel

参照: Swing レイアウト ガイド

于 2011-10-05T20:36:20.803 に答える