0

現在課題に取り組んでおり、基本的に最初の GUI を書いています。スクロールバーを除いてすべて正常に機能しています。追加すると表示されないだけでなく、コメントアウトした後でも、追加された最後の要素(.add関数呼び出しを介して)がGUI全体をカバーします。レイアウトをnullに設定するとそれが修正されたようですが、それが最初の問題を助けるか妨げるかはわかりません。私はすでに Oracle のドキュメントと例を調べてきましたが、必要なものがわかりませんでした。関連するコードは次のとおりです(空間に浮かんでいるように見える変数 ag は別のセクションの一部であり、GUI コードを分離するために貼り付けていません)。

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

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

    JFrame mygui = new JFrame();
    mygui.getContentPane();
    mygui.setBounds(100, 100, 700, 500);
    mygui.setLayout(new BorderLayout()); //playing with layout here

    JLabel first = new JLabel("integer:");
    JLabel second = new JLabel("float:");
    JLabel third = new JLabel("short:");
    JLabel fourth = new JLabel("long:");
    JLabel fifth = new JLabel("byte:");
    JLabel sixth = new JLabel("double:");
    JLabel seventh = new JLabel("boolean:");
    JTextField myint = new JTextField("" + a);
    JTextField myfloat = new JTextField("" + b);
    JTextField myshort = new JTextField("" + c);
    JTextField mylong = new JTextField("" + d);
    JTextField mybyte = new JTextField("" + e);
    JTextField mydbl = new JTextField("" + f);
    JTextField mybool = new JTextField("" + g);
    JTextArea myarea = new JTextArea();
    JScrollPane scrolla = new JScrollPane(myarea);  

    first.setOpaque(true);
    first.setBounds(20, 20, 50, 20);
    second.setOpaque(true);
    second.setBounds(20, 70, 50, 20);
    third.setOpaque(true);
    third.setBounds(20, 120, 50, 20);
    fourth.setOpaque(true);
    fourth.setBounds(20, 170, 50, 20);
    fifth.setOpaque(true);
    fifth.setBounds(20, 220, 50, 20);
    sixth.setOpaque(true);
    sixth.setBounds(20, 270, 50, 20);
    seventh.setOpaque(true);
    seventh.setBounds(20, 320, 50, 20);

    myint.setBounds(70, 20, 50, 20);
    myint.setOpaque(true);
    myfloat.setBounds(70, 70, 50, 20);
    myfloat.setOpaque(true);
    myshort.setBounds(70, 120, 50, 20);
    myshort.setOpaque(true);
    mylong.setBounds(70, 170, 80, 20);
    mylong.setOpaque(true);
    mybyte.setBounds(70, 220, 50, 20);
    mybyte.setOpaque(true);
    mydbl.setBounds(70, 270, 50, 20);
    mydbl.setOpaque(true);
    mybool.setBounds(70, 320, 50, 20);
    mybool.setOpaque(true);

    myarea.setBounds(200, 50, 250, 200);
    myarea.setOpaque(true);
    scrolla.setPreferredSize(new Dimension(250, 200));

    mygui.add(first);
    mygui.add(second);
    mygui.add(third);
    mygui.add(fourth);
    mygui.add(fifth);
    mygui.add(sixth);
    mygui.add(seventh);

    mygui.add(myint);
    mygui.add(myfloat);
    mygui.add(myshort);
    mygui.add(mylong);
    mygui.add(mybyte);
    mygui.add(mydbl);
    mygui.add(mybool);
    mygui.add(scrolla);

    myarea.append("" + errcheck + "\n");
    myarea.append("" + valcheck + "\n");

    while(y < 2)
    {
    myarea.append("" + a + "\n");
    myarea.append("" + b + "\n");
    myarea.append("" + c + "\n");
    myarea.append("" + d + "\n");
    myarea.append("" + e + "\n");
    myarea.append("" + f + "\n");
    myarea.append("" + g + "\n");
    myarea.append("" + w + "\n");
    myarea.append("" + u + "\n");
    myarea.append("" + v + "\n");
    myarea.append("" + secondary + "\n");
    myarea.append("" + whilecount + "\n");;
    y++;
    a--;
    }

    mygui.setVisible(true);
    mygui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
 }

簡単なことだと思いますが、フィードバックをいただければ幸いです。

4

3 に答える 3

3

BorderLayoutコンポーネントを追加できる5つの定義済みの場所があります。

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

デフォルトの場所はですCENTER

基本的に何が起こっているのか、各コンポーネントをフレーム/コンテンツペインに追加すると、最後のコンポーネントが削除され、特定の場所に1つのコンポーネントしか存在できないため、中央に配置されます。

レイアウトマネージャーを変更することから始めます。いくつかのアイデアについては、レイアウトマネージャーのビジュアルガイドをご覧ください。

于 2013-03-07T05:18:37.117 に答える
1

BorderLayout setBounds() メソッドを使用する場合、効果はありません。BorderLayout を使用すると、コンポーネントを北、南、東、西、中央の
5 つの位置にのみ固定できます。 のような位置を指定しないと、コンポーネントがランダムにレンダリングされます。位置を指定せずにコンポーネントを追加すると、オーバーラップし、明確なビューが得られません。
add(comp, BorderLayout.EAST)

5 つ以上のコンポーネントを使用しており、位置を指定していないため、スクロールペイン
は表示されません。

GridBagLayout を使用して正しい結果を生成します。http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.htmlを参照してください。

于 2013-03-07T05:59:40.840 に答える
-2

次の行を削除します。

mygui.getContentPane();

それは問題ではないからです。また、変更します

mygui.setLayout(new BorderLayout()); //playing with layout here

mygui.getContentPane ().setLayout (null); // playing with layout here

すべてのコンポーネントの境界を自分で指定したいからです。また、変更します

myarea.setBounds(200, 50, 250, 200);

scrolla.setBounds(200, 50, 250, 200);

次の行を削除します。

scrolla.setPreferredSize(new Dimension(250, 200));

レイアウトマネージャーがなければ、好みのサイズは必要ないからです。また、変更します

mygui.add(first);
mygui.add(second);
mygui.add(third);
mygui.add(fourth);
mygui.add(fifth);
mygui.add(sixth);
mygui.add(seventh);

mygui.add(myint);
mygui.add(myfloat);
mygui.add(myshort);
mygui.add(mylong);
mygui.add(mybyte);
mygui.add(mydbl);
mygui.add(mybool);
mygui.add(scrolla);

mygui.getContentPane ().add(first);
mygui.getContentPane ().add(second);
mygui.getContentPane ().add(third);
mygui.getContentPane ().add(fourth);
mygui.getContentPane ().add(fifth);
mygui.getContentPane ().add(sixth);
mygui.getContentPane ().add(seventh);

mygui.getContentPane ().add(myint);
mygui.getContentPane ().add(myfloat);
mygui.getContentPane ().add(myshort);
mygui.getContentPane ().add(mylong);
mygui.getContentPane ().add(mybyte);
mygui.getContentPane ().add(mydbl);
mygui.getContentPane ().add(mybool);
mygui.getContentPane ().add(scrolla);

原因コンポーネントはJFrameに直接追加するのではなく、コンテンツペインにのみ追加する必要があります。これらの変更後、正常に動作するはずです。テキスト領域に十分なテキストがあると、スクロールバーが表示されます。これが私のために働くあなたのコードの修正されたバージョンです:

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

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

        JFrame mygui = new JFrame ();
        mygui.getContentPane ();
        mygui.setBounds (100, 100, 700, 500);
        mygui.getContentPane ().setLayout (null); // playing with layout here

        JLabel first = new JLabel ("integer:");
        JLabel second = new JLabel ("float:");
        JLabel third = new JLabel ("short:");
        JLabel fourth = new JLabel ("long:");
        JLabel fifth = new JLabel ("byte:");
        JLabel sixth = new JLabel ("double:");
        JLabel seventh = new JLabel ("boolean:");
        JTextField myint = new JTextField ("a");
        JTextField myfloat = new JTextField ("b");
        JTextField myshort = new JTextField ("c");
        JTextField mylong = new JTextField ("d");
        JTextField mybyte = new JTextField ("e");
        JTextField mydbl = new JTextField ("f");
        JTextField mybool = new JTextField ("g");
        JTextArea myarea = new JTextArea ();
        JScrollPane scrolla = new JScrollPane (myarea);

        first.setOpaque (true);
        first.setBounds (20, 20, 50, 20);
        second.setOpaque (true);
        second.setBounds (20, 70, 50, 20);
        third.setOpaque (true);
        third.setBounds (20, 120, 50, 20);
        fourth.setOpaque (true);
        fourth.setBounds (20, 170, 50, 20);
        fifth.setOpaque (true);
        fifth.setBounds (20, 220, 50, 20);
        sixth.setOpaque (true);
        sixth.setBounds (20, 270, 50, 20);
        seventh.setOpaque (true);
        seventh.setBounds (20, 320, 50, 20);

        myint.setBounds (70, 20, 50, 20);
        myint.setOpaque (true);
        myfloat.setBounds (70, 70, 50, 20);
        myfloat.setOpaque (true);
        myshort.setBounds (70, 120, 50, 20);
        myshort.setOpaque (true);
        mylong.setBounds (70, 170, 80, 20);
        mylong.setOpaque (true);
        mybyte.setBounds (70, 220, 50, 20);
        mybyte.setOpaque (true);
        mydbl.setBounds (70, 270, 50, 20);
        mydbl.setOpaque (true);
        mybool.setBounds (70, 320, 50, 20);
        mybool.setOpaque (true);

        myarea.setOpaque (true);
        myarea.setBackground (Color.yellow);
        scrolla.setBounds (200, 50, 250, 200);
        scrolla.setPreferredSize (new Dimension (250, 200));

        mygui.getContentPane ().add (first);
        mygui.getContentPane ().add (second);
        mygui.getContentPane ().add (third);
        mygui.getContentPane ().add (fourth);
        mygui.getContentPane ().add (fifth);
        mygui.getContentPane ().add (sixth);
        mygui.getContentPane ().add (seventh);

        mygui.getContentPane ().add (myint);
        mygui.getContentPane ().add (myfloat);
        mygui.getContentPane ().add (myshort);
        mygui.getContentPane ().add (mylong);
        mygui.getContentPane ().add (mybyte);
        mygui.getContentPane ().add (mydbl);
        mygui.getContentPane ().add (mybool);
        mygui.getContentPane ().add (scrolla);

        myarea.append ("sdfgsdfgsdfgsf\n");

        mygui.setVisible (true);
        mygui.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    }
}
于 2013-03-07T05:18:33.187 に答える