1

私はJavaの再学習に時間を費やしてきましたが、ここで奇妙な論理エラーが発生しました。

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

class Frame
{
    public static void main (String args[])
    {

        JFrame frame = new JFrame("Tester Frame");
        frame.setSize(400, 500);

        JButton btn1 = new JButton("FOO");
        btn1.setSize(150, 50);
        btn1.setLocation(45, 0);

        JButton btn2 = new JButton("BAR");
        btn2.setSize(150, 50);
        btn2.setLocation(205, 0);

        Container content = frame.getContentPane();
        content.setBackground(Color.blue);
        content.add(btn1);
        content.add(btn2);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }//end main                                                                                                         
}

2 つの JButton オブジェクトを作成しました。これらは同じサイズで、場所とテキストが異なります。これはもちろんそうではありません。「FOO」ボタンはまさに私が望む場所と方法ですが、「BAR」ボタンはフレーム全体のサイズです。

ヘルプ!

4

4 に答える 4

4

1)などを介してAbsoluteLayoutManagerを使用しようとしていますが、s を追加するコンポーネントを呼び出さずに。ただし、これは Swing でのベスト プラクティスではありませんsetSizesetLocationsetLayout(null)JButton

JFrame contentpaneに追加するときのデフォルト レイアウトはBorderLayout、コンポーネントを追加するデフォルトの位置ですBorderLayout.CENTER

A Visual Guide to Layout Managers を読んでください。

2) また、正しいを使用する場合は、呼び出しLayoutManagerを省略し、可視を設定する前にJFrame#setSize(..)置き換えます。JFrame#pack()JFrame

3) また、ブロック を介して EDT ですべてのスイング コンポーネントを作成することを指示する、特にイベント ディスパッチ スレッドに関するSwing の同時実行についても読んでください。SwingUtillities.invokeXXX(..)

SwingUtilities.invokeLater(new Runnable() {
   @Override
    public void run() {
         //create and manipulate swing components here
    }
});

JFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);4)これにより、他のスレッドタイマーなどが破棄された後でも実行を継続できるようになるため、むしろ使用しますJFrame

于 2013-07-30T17:53:31.657 に答える
0

フレームにパネルを追加し、パネルにボタンを追加するだけです。

import javax.swing.*;

import java.awt.*;

class source
{
   public static void main (String args[])
   {

   JFrame frame = new JFrame("Tester Frame");
   frame.setSize(400, 500);

   JPanel panel=new JPanel();//panel added here
   panel.setSize(frame.size());
   panel.setLocation(0, 0);

   JButton btn1 = new JButton("FOO");
   btn1.setSize(150, 50);
   btn1.setLocation(45, 0);

   JButton btn2 = new JButton("BAR");
   btn2.setSize(150, 50);
   btn2.setLocation(205, 0);

   panel.add(btn1);
   panel.add(btn2);

   Container content = frame.getContentPane();
   content.setBackground(Color.blue);
   content.add(panel);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}//endmain                                                                                                         
于 2013-07-30T18:06:33.383 に答える