3

9つのボタンで構成されるJAppletアプリケーションを作成しました。

  • アプレットが最初に起動されたとき、それは完全に白です。ボタンがある領域をクリックすると、ボタンが表示されて機能します。

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

  • アプレットが起動されてから30秒後、ボタンは表示されますが、背景はまだ白です。

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

  • メインメニューは次のようになります。

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

アプレットが正しくロードされないのはなぜですか?アプレットのコードは次のとおりです。

ConverterApplet.java:

public class ConverterApplet extends JApplet {

    public void init()
    {
        try{
            SwingUtilities.invokeAndWait(new Runnable(){

                @Override
                public void run() 
                {
                    createGUI();

                }

            });
        }catch(Exception e)
        {
            System.err.println("GUI could not be created.");
        }
    }

    public void start(){}
    public void stop(){}

    public void destroy(){}

    public void paint(java.awt.Graphics g){
        resize(400,400);   
    };

    private void createGUI()
    {
        MainPanel m = new MainPanel();
        getContentPane().add(m,BorderLayout.CENTER); 
    }

}

MainPanel.java:

public class MainPanel extends JPanel implements ActionListener {

    private final static String UNIT_SELECTION_PANEL = "UNIT_SELECTION_CARD";
    private final static String UNIT_CONVERSION_PANEL = "UNIT_CONVERSION_PANEL";    

    JPanel cardPanel;
    private JButton[] UnitButtons;
    private JButton backButton; 
    private CardLayout cardLayout;
    private UnitConversionPanel unitConversionPanel;

    public MainPanel()
    {
        super(new GridBagLayout());

        cardPanel = new JPanel();
        JPanel unitSelectionPanel = new JPanel();

        backButton = new JButton("<-");
        backButton.addActionListener(this);
        backButton.setVisible(false);

        UnitButtons = new JButton[9];
        UnitButtons[0] = new JButton("Length");
        UnitButtons[1] = new JButton("Time");
        UnitButtons[2] = new JButton("Mass");
        UnitButtons[3] = new JButton("Speed");
        UnitButtons[4] = new JButton("Volume");
        UnitButtons[5] = new JButton("Area");
        UnitButtons[6] = new JButton("Pressure");       
        UnitButtons[7] = new JButton("Temperature");
        UnitButtons[8] = new JButton("Energy");

        for(int i=0;i<UnitButtons.length;i++)
        {
            UnitButtons[i].addActionListener(this);
        }

        GridLayout layout = new GridLayout(0,3,20,20);
        unitSelectionPanel.setLayout(layout);

        for(JButton buttons: UnitButtons)
        {
            unitSelectionPanel.add(buttons);
        }

        unitConversionPanel = new UnitConversionPanel();

        cardLayout = new CardLayout();
        cardPanel.setLayout(cardLayout);
        cardPanel.add(UNIT_SELECTION_PANEL, unitSelectionPanel);
        cardPanel.add(UNIT_CONVERSION_PANEL, unitConversionPanel);
        cardLayout.show(cardPanel, UNIT_SELECTION_PANEL);

        GridBagConstraints c = new GridBagConstraints();
        //c.fill = GridBagConstraints.VERTICAL;
        c.gridx = 0;
        c.gridy = 0;
        //c.insets = new Insets(5,5,5,5);
        add(backButton,c); 

        c.fill = GridBagConstraints.BOTH;
        c.weightx = 1;
        c.weighty = 1;
        c.gridx = 0;
        c.gridy = 1;
        c.gridwidth=2;
        c.gridheight=1;
        add(cardPanel,c);       
    }

}
4

1 に答える 1

3
public void paint(java.awt.Graphics g){ 
    resize(400,400); 
}; 

ペイントでGUIを変更するメソッドを呼び出さないでください。そうすると、通常、再ペイントがトリガーされ、ペイントが呼び出されてサイズが設定され、次にサイズが設定されます。

また、Javaコード内からアプレットのサイズを変更しようとしないでください(これまで)。アプレットのサイズはHTMLで設定する必要があります。そのメソッド全体を削除します。validate()コンポーネントが追加されたら、必ず電話してください。

..これを実行可能なjarにすることを望んでいます。代わりにJFrameを使用する必要がありますか?

はい、間違いなく。

次にJFrame、JavaWebStartを使用してリンクからを起動します。「ダブルクリック-起動」アプリを作成します。エンドユーザーにOKのエクスペリエンスを提供しますが、JWSはそれをすべて非常に洗練されたプロフェッショナルなものにします。

于 2012-09-01T15:42:26.090 に答える