0

フォームがあり、それを使用してレンダリングするpackと、テキスト ボックスのデフォルトの高さが適切になります。しかし、サイズを変更すると、またはこの場合、オーバーライドgetPreferredSizeして起動時に大きくすると、テキストボックスは比例してサイズが変更されます。

私は、レイアウト マネージャー クラスを理解しようと、ぐるぐると回り続けています... 出てくる関連する質問は、本当に近いように思えますが、私はそれらをフォローしていません!

以下のクラスでは、オーバーロードをコメントアウトするgetPreferredSizeと、テキストボックスはシステムによって「ちょうどいい」サイズに調整されます。元にgetPreferredSize戻すか、手動でサイズを変更すると、テキストボックスの比率がフォームに合わせて拡大/縮小します。私が見逃している単純なものがあるに違いありません!

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

public class TestTextBox extends JFrame {

   private JTextField jtfRate = new JTextField();//jtfAnnualInterestRate
   private JButton jbtComputeLoan = new JButton("Compute Sentence");

   // Constructor buids the panel
   public TestTextBox() {
      // a panel with the fields
      JPanel p1 = new JPanel(new GridLayout(5, 2));

      p1.add(new JLabel("Annual Interest Rate"));
      p1.add(jtfRate);

      p1.setBorder(new TitledBorder("This is a border with enough text that I want to see it"));

      // a panel with the button
      JPanel p2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
      p2.add(jbtComputeLoan);

      // Put the panels on the frame
      add(p1, BorderLayout.CENTER);
      add(p2, BorderLayout.SOUTH);
   }   

   @Override
   public Dimension getPreferredSize() {
      // This will help Pack to pack it up better
      return new Dimension(600, 300);
   }   

   public static void main(String[] args) {
      TestTextBox jailCell = new TestTextBox();
      jailCell.pack(); // Arrange controls compactly based on their properties
      jailCell.setTitle("Calculate your Sentence");
      jailCell.setLocationRelativeTo(null); // sure, center it, whatever
      jailCell.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      jailCell.setVisible(true);
   }

}

明らかに、これは GUI レイアウト ツールの場合です。しかし、これは製品コードではありません。これは Java クラスであり、なぜそれが機能するのかを学ぶために最善を尽くしています。そうすれば、GUI ツールが何をしているかを知ることができます。

更新:回答のおかげで、GridBag の基本を理解することができました。HTML とかなり密接に関連しているよう<table>です。主に、コントロール, c);に を適用するのを忘れていたため、必要以上に時間がかかりました。GridBagConstraints上記の比較的単純な add がどのように変化したかのサンプルを次に示します。

  GridBagConstraints c = new GridBagConstraints();
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 0;
  c.gridy = 0;
  p1.add(new JLabel("Annual Interest Rate"), c);
  c = new GridBagConstraints();
  c.fill = GridBagConstraints.HORIZONTAL;
  c.gridx = 1;
  c.gridy = 0;
  c.weightx = 0.25;
  p1.add(jtfRate, c);
4

1 に答える 1