1

私はこのGUIを持っています。高さが十分に大きくない場合、ペインは互いに重なります。2つの行が完全に見えるように、少なくとも200に設定する必要があります。しかし、200に設定すると、最後に大きな空の行が表示されるので、それは望ましくありません。どうすればこれを修正できますか?ありがとう。

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

public class MyFrame extends JFrame {

    JButton panicButton;
    JButton dontPanic;
    JButton blameButton;
    JButton newsButton;
    JButton mediaButton;
    JButton saveButton;
    JButton dontSave;

    public MyFrame() {
        super("Crazy App");
        setSize(400, 150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel row1 = new JPanel();
        panicButton = new JButton("Panic");
        dontPanic = new JButton("No Panic");
        blameButton = new JButton("Blame");
        newsButton = new JButton("News");
        //adding first row
        GridLayout grid1 = new GridLayout(4, 2, 10, 10);
        setLayout(grid1);
        FlowLayout flow1 = new FlowLayout(FlowLayout.CENTER, 10, 10);
        row1.setLayout(flow1);
        row1.add(panicButton);
        row1.add(dontPanic);
        row1.add(blameButton);
        row1.add(newsButton);
        add(row1);
        //adding second row
        JPanel row2 = new JPanel();
        mediaButton = new JButton("Blame");
        saveButton = new JButton("Save");
        dontSave = new JButton("No Save");
        GridLayout grid2 = new GridLayout(3, 2, 10, 10);
        setLayout(grid2);
        FlowLayout flow2 = new FlowLayout(FlowLayout.CENTER, 10, 10);
        row2.setLayout(flow2);        
        row2.add(mediaButton);
        row2.add(saveButton);
        row2.add(dontSave);
        add(row2);       

        setVisible(true);       

    }

    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
    }   
}
4

1 に答える 1

3
  1. 元のコードでは、1 つのパネルのレイアウトを 2 回別々に設定していました。わかりやすくするために、コンストラクターで一度設定します。
  2. 2 番目のレイアウトは 3 行を指定しました
  3. pack()コンポーネントに必要な最小限のサイズに GUI を縮小するには、最上位のコンテナーを呼び出します。

最終結果

ここに画像の説明を入力


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

public class MyFrame17 extends JFrame {

    JButton panicButton;
    JButton dontPanic;
    JButton blameButton;
    JButton newsButton;
    JButton mediaButton;
    JButton saveButton;
    JButton dontSave;

    public MyFrame17() {
        super("Crazy App");
        setLayout(new GridLayout(2, 2, 10, 10));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel row1 = new JPanel();
        panicButton = new JButton("Panic");
        dontPanic = new JButton("No Panic");
        blameButton = new JButton("Blame");
        newsButton = new JButton("News");
        FlowLayout flow1 = new FlowLayout(FlowLayout.CENTER, 10, 10);
        row1.setLayout(flow1);
        row1.add(panicButton);
        row1.add(dontPanic);
        row1.add(blameButton);
        row1.add(newsButton);
        add(row1);
        //adding second row
        JPanel row2 = new JPanel();
        mediaButton = new JButton("Blame");
        saveButton = new JButton("Save");
        dontSave = new JButton("No Save");
        FlowLayout flow2 = new FlowLayout(FlowLayout.CENTER, 10, 10);
        row2.setLayout(flow2);        
        row2.add(mediaButton);
        row2.add(saveButton);
        row2.add(dontSave);
        add(row2);       

        pack();
        setVisible(true);       
    }

    public static void main(String[] args) {
        MyFrame17 frame = new MyFrame17();
    }   
}

さらなるヒント

  1. フレームを拡張しないでください。フレームのインスタンスを使用してください。
  2. フレーム、アプレット、ダイアログに追加できるパネルに GUI 全体を構築します。
  3. テスト クラスを開発するときは、より適切な名前を付けてMyFrameください。追加するのに適した言葉は ですTest。次に、何がテストされているかを考えてください。これはボタンの配置に関するものなのでButtonLayoutTest、いい名前かもしれません。
  4. GUI は EDT で開始する必要があります。
于 2012-08-12T22:56:00.923 に答える