2

ここに画像の説明を入力してください *

(凡例)青-メインパネル、赤-upanel、黒-ulpanel、緑-urpanel

*したがって、アプレットとJFrameの両方に同じコードがあります。ご覧のとおり、 `setsize()を同じにすると、どちらも異なる結果を生成します。アプレットを同じように動作させる方法がわかりません。

    import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Test2 extends Applet {

    JPanel mainpanel = new JPanel();
    JPanel upanel = new JPanel();
    JPanel dpanel = new JPanel();
    JPanel ulpanel = new JPanel();
    JPanel urpanel = new JPanel(); 
    JPanel dlpanel = new JPanel();
    JPanel drpanel = new JPanel();

    JLabel l1 = new JLabel("Label 1");
    JLabel l2 = new JLabel("Label 2");
    JLabel l3 = new JLabel("Label 3");
    JLabel l4 = new JLabel("Label 4");

    JTextField tb1 = new JTextField();
    JTextField tb2 = new JTextField();
    JTextField tb3 = new JTextField();

    JTextArea ta1 = new JTextArea();

    public void init() {

        mainpanel.setBorder(BorderFactory.createLineBorder(Color.blue, 2));
        ulpanel.setBorder(BorderFactory.createLineBorder(Color.black, 2));
        urpanel.setBorder(BorderFactory.createLineBorder(Color.green, 2));
        upanel.setBorder(BorderFactory.createLineBorder(Color.red, 2));
        mainpanel.setLayout(new GridLayout(1, 1));
        upanel.setLayout(new GridLayout(1, 2));
        urpanel.setLayout(new BorderLayout());
        urpanel.add(ta1,BorderLayout.CENTER);
        ulpanel.setLayout(new GridBagLayout());
        GridBagConstraints g = new GridBagConstraints();
        g.ipadx = 2;
        g.ipady = 2;
        g.insets = new Insets(2, 2, 2, 2);
//      g.anchor = GridBagConstraints.EAST;
        g.gridx = 0; g.gridy = 0;
        ulpanel.add(l1, g);
        g.gridx = 0; g.gridy = 1;
        ulpanel.add(l2, g);
        g.gridx = 2; g.gridy = 1;
        ulpanel.add(l3, g);
        g.gridx = 0; g.gridy = 2;
        ulpanel.add(l4, g);

        g.gridwidth = GridBagConstraints.REMAINDER;
        g.fill = GridBagConstraints.HORIZONTAL;
//      g.anchor = GridBagConstraints.WEST;
        g.weightx = 1;
        g.gridx = 1; g.gridy = 0;
        ulpanel.add(tb1, g);
        g.gridwidth = 1;
        g.gridx = 1; g.gridy = 1;
        ulpanel.add(tb2,g);
        g.gridx = 3; g.gridy = 1;
        ulpanel.add(tb3,g);

        upanel.add(ulpanel);
        upanel.add(urpanel);
        mainpanel.add(upanel);
        add(mainpanel);

    }
}

アプレットをHTMLに埋め込んでサイズを指定しようとしましたが、それでも、アプレットの外側の「シェル」のみがそのシェルを取り、アプレットに追加した内側のパネルは取りません。

4

1 に答える 1

3

SSCCEの場合は+1

1)SwingコンポーネントをAWTと混合するのAppletではなく、代わりに使用JAppletします。

public class Test2 extends JApplet {

2)SwingUtilities.invokeAndWait()ブロックを使用して、UIの作成をオーバーライドでラップします。init() ここを参照してください

同様に(例外処理は省略)。

@Override
public void init() {
    try {
        SwingUtilities.invokeAndWait(new Runnable() {
            @Override
            public void run() {
            //create UI here
            }
        });
}

それは私のために働くようですか、それとも私は何かが欠けていますか?:

ここに画像の説明を入力してください

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.lang.reflect.InvocationTargetException;
import javax.swing.BorderFactory;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Test extends JApplet {

    JPanel mainpanel = new JPanel();
    JPanel upanel = new JPanel();
    JPanel dpanel = new JPanel();
    JPanel ulpanel = new JPanel();
    JPanel urpanel = new JPanel();
    JPanel dlpanel = new JPanel();
    JPanel drpanel = new JPanel();
    JLabel l1 = new JLabel("Label 1");
    JLabel l2 = new JLabel("Label 2");
    JLabel l3 = new JLabel("Label 3");
    JLabel l4 = new JLabel("Label 4");
    JTextField tb1 = new JTextField();
    JTextField tb2 = new JTextField();
    JTextField tb3 = new JTextField();
    JTextArea ta1 = new JTextArea();

    @Override
    public void init() {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                @Override
                public void run() {
                    initComponents();
                }
            });
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        } catch (InvocationTargetException ex) {
            ex.printStackTrace();
        }
    }

    private void initComponents() {
        mainpanel.setBorder(BorderFactory.createLineBorder(Color.blue, 2));
        ulpanel.setBorder(BorderFactory.createLineBorder(Color.black, 2));
        urpanel.setBorder(BorderFactory.createLineBorder(Color.green, 2));
        upanel.setBorder(BorderFactory.createLineBorder(Color.red, 2));
        mainpanel.setLayout(new GridLayout(1, 1));
        upanel.setLayout(new GridLayout(1, 2));
        urpanel.setLayout(new BorderLayout());
        urpanel.add(ta1, BorderLayout.CENTER);
        ulpanel.setLayout(new GridBagLayout());
        GridBagConstraints g = new GridBagConstraints();
        g.ipadx = 2;
        g.ipady = 2;
        g.insets = new Insets(2, 2, 2, 2);
        //      g.anchor = GridBagConstraints.EAST;
        g.gridx = 0;
        g.gridy = 0;
        ulpanel.add(l1, g);
        g.gridx = 0;
        g.gridy = 1;
        ulpanel.add(l2, g);
        g.gridx = 2;
        g.gridy = 1;
        ulpanel.add(l3, g);
        g.gridx = 0;
        g.gridy = 2;
        ulpanel.add(l4, g);

        g.gridwidth = GridBagConstraints.REMAINDER;
        g.fill = GridBagConstraints.HORIZONTAL;
        //      g.anchor = GridBagConstraints.WEST;
        g.weightx = 1;
        g.gridx = 1;
        g.gridy = 0;
        ulpanel.add(tb1, g);
        g.gridwidth = 1;
        g.gridx = 1;
        g.gridy = 1;
        ulpanel.add(tb2, g);
        g.gridx = 3;
        g.gridy = 1;
        ulpanel.add(tb3, g);

        upanel.add(ulpanel);
        upanel.add(urpanel);
        mainpanel.add(upanel);
        add(mainpanel);
    }
}

アップデート

(@AndrewThompsonのコメントを読んだ後)あなたはサイズについて話しているかもしれませんし、なぜすべてが押しつぶされているのですか?彼が言ったように、あなたはそのコンポーネントに合うようにフレームのサイズをJFrame設定するサイズまたは呼び出しを設定することができます。pack()

Applet/の場合JApplet、HTMLランチャーを使用してサイズを変更します。これをHTMLで見つけて、必要に応じて変更します。

    <applet width="600" height="600">         <!-- ALTER WIDTH AND HEIGHT HERE -->
        <param name="jnlp_href" value="launch.jnlp"/>
    </applet>

これも変更する必要があるかもしれません:

    <script>
        var attributes = {
            code:       "Test",
            archive:    "TestJApplet.jar",
            width:      600,            <!-- ALTER WIDTH HERE -->
            height:     600             <!-- ALTER HEIGHT HERE -->
        };
        var parameters = {jnlp_href:"launch.jnlp"}; <!-- Applet Parameters -->
        var version = "1.7"; <!-- Required Java Version -->
        deployJava.runApplet(attributes, parameters, version);
    </script>
于 2012-11-19T21:19:43.507 に答える