フォームがあり、それを使用してレンダリングする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);