GridBagLayoutと少し混乱します。
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
public class MihatteFrame extends JFrame {
private JTextArea area;
private JTextField textField;
private Button b;
final static boolean shouldFill = true;
public MihatteFrame() {
setTitle("見張ってしながら...");
setSize(500,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
if (shouldFill) {
c.fill = GridBagConstraints.HORIZONTAL;
}
area = new JTextArea(5, 15);
area.setEditable(false);
area.setCursor(null);
area.setOpaque(false);
area.setFocusable(false);
area.setLineWrap(true);
area.setWrapStyleWord(true);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0;
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.WEST;
this.add(area, c);
textField = new JTextField(20);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1;
c.gridx = 2;
c.gridy = 0;
c.anchor = GridBagConstraints.CENTER;
this.add(textField);
//textField.addActionListener(this);
b = new Button("Proceed");
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 0;
c.gridx = 2;
c.gridy = 0;
this.add(b);
setVisible(true);
}
public void displayText(String text) {
area.setText(text);
//textField.setText(text)
}
}
基本とその機能を理解しています。サイズ変更(具体的にはダウンサイジング)の問題を整理しています。
テキスト領域の重みが0で、テキストフィールドの重みが1の場合、サイズ変更に問題はありませんが、テキスト領域は中央にあり、アンカーされているにもかかわらず、左側に正対していません。
テキスト領域の重みが0を超え、テキストフィールドの重みが相関している場合(たとえば、0.2 / 0.8)、すべてがバグのようにぴったりと見え、アップサイジングは問題ありませんが、ダウンサイジングでは、テキストフィールドの幅が1文字に縮小されます。
フレームに合わせてテキスト領域のサイズを変更してもかまいませんが、テキストフィールドを続行ボタンに押し付けるのではなく、フレームを小さくしたときに元のサイズに戻したいと思います。
これをJPanelボーダーレイアウトに配置する必要があるかもしれないことを読みました-これがコードでどのように見えるかわからないので、誰かがそれが事実ならどこに行くのか教えてくれればありがたいです。
だから質問:
- テキスト領域を西に固定し、サイズ変更時にテキストフィールドを小さいサイズに縮小しないようにする方法はありますか?
- アンカーが機能しないのはなぜですか?
- 別のレイアウトに関連してテキスト領域をJPanelに配置する必要がありますか?その場合、コードはどこに配置されますか?
- なぜ誰もがGridBagLayoutを恐れているのですか?私が見た「私はこれを絶対に避けます」の量...
ありがとうございました!(Ps。はactionlistenerの実装の途中なので、半分完了しているように見える場合は、それが理由です)。