2

私はJavaとOOPS全般の初心者です。はじめに Head First Java を勉強し、その中で GUI と Swing の概念を勉強しています。以下のコードは、理解を目的としたものです。

コードを実行すると、フレームウィンドウにボタンが表示され、展開するとラジオボタンも表示されます。

問題-

  1. ボタンは、ウィンドウ サイズがボタン サイズ以下になるまで機能します。ウィンドウのサイズをボタンのサイズよりも少し大きくするとすぐに、カーソルがその上にあるときにのみボタンが表示されます。

マウスを使用してウィンドウのサイズを変更しています。

  1. フレームサイズをボタン以上に設定しても。frame.setSize(800,800); と言います。ボタンはcontentPane全体をカバーします。サイズ変更でも同じように動作します。

  2. また、contentPane のどこをクリックしても、ボタンはマウスのクリックに応答します。ボタンを直接クリックした場合にのみ応答するはずです。

なぜこのように振る舞うか教えてください。

可能であれば、コードの修正またはこれを修正するための追加。

import java.awt.Color;
import javax.swing.*;
import java.awt.event.*;
public class Test1 implements ActionListener {

JFrame frame = new JFrame("Frame");
JButton button = new JButton("Button!");
JRadioButton radio = new JRadioButton("VideoKilledTheRadioStar!",true);
int j=0;


public static void main(String[] args) {
    Test1 t = new Test1();
    t.method1();

}
public void method1()
{

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
button.setSize(100,100);
button.setBackground(Color.ORANGE);
frame.add(button);
frame.setSize(100,100);
frame.setVisible(true);
button.addActionListener(this);
frame.getContentPane().add(radio);
radio.addActionListener(this);

}
public void actionPerformed(ActionEvent e)
{j++;
button.setText("clicked .. " + j);

    if(button.getBackground()==Color.ORANGE)
    button.setBackground(Color.BLUE);
    else
        button.setBackground(Color.ORANGE);
}

}

PSコードのどのセグメントがこの質問に重要または関連性が高いかわからなかったため、完全なコードを掲載しました。

4

2 に答える 2

3

JButton buttonと のJRadioButton両方を場所に追加しているBorderLayout.CENTERため、1 つだけが表示されます。この位置のコンポーネントは、X 軸と Y 軸のサイズになります。

ペイントに使用されるJButton独自のものがあるため、カーソルがその上にある場合にのみ表示されます。MouseListener

また、ステートメント

frame.add(myComponent);

frame.getContentPane().add(myComponent);

どちらもコンポーネントをフレームに追加するContentPane& は同等ですが、便宜上最初のものが選択されています。

コンポーネントは の同じ位置に共存できないことに注意してくださいBorderLayoutbuttonをその位置に配置できますBorderLayout.SOUTH(& フレームに直接追加):

frame.add(radio, BorderLayout.SOUTH);

BorderLayoutBoxLayoutコンポーネントの優先サイズを無視するため、固定サイズを維持するなど、別のレイアウト マネージャーを使用する必要がありますJButton

レイアウト マネージャーの詳細を見る

于 2012-12-24T11:24:51.253 に答える
3

JButtonボタンとJRadioButtonオブジェクトを のデフォルトの layout( BorderLayout)に追加しようとしていますJFrame

JFrame にコンポーネントを追加するたびにBorderLayout、コンポーネントが中央セクションに配置され、BorderLayout中央セクションが完全なスペースを占有する傾向があるため、要素を適切に配置するには、場所を指定し、コンポーネントの PreferredSize を設定する必要があります。

frame.add(radio, BorderLayout.SOUTH);
component.setPreferredSize(Dimension);
于 2012-12-24T11:33:12.520 に答える