アプリ版:「スタンプのみでお礼する」機能のリリースについて

ウィンドウ上のjContentPane上にJPanelを配置し、レイアウトをGridBagLayoutにしてそのJPanel上にJTextFieldを置くとそのJTextFieldの幅がほぼ0になります。下記のプログラムがその一部です。gridBagConstraints2.fill をnullにしたままJTextFieldの幅を広げたいのですがどうしたらいいでしょうか?教えてください。
private JPanel getJPanel() {
if (jPanel == null) {
GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
jPanel = new JPanel();
jPanel.setLayout(new GridBagLayout());
jPanel.setPreferredSize(new java.awt.Dimension(200,150));
gridBagConstraints2.gridx = 0;
gridBagConstraints2.gridy = 0;
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.fill = java.awt.GridBagConstraints.NONE;
gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints2.gridwidth = 4;
jPanel.add(getJTextField(), gridBagConstraints2);
}
return jPanel;
}

private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setColumns(32);
}
return jTextField;
}

A 回答 (5件)

#2です。


えーと、setMinimizeSizeでうまくいきませんでした?
(fillはNONEでもnullでも動きは同じだと思います。)

いちおう、setPreferredSizeでだめな理由もしらべてみました。
JTextFieldにseColumns(32)してますよね?
これをやると、setPreferredSizeで指定した値よりも、
getPreferredSizeはカラム数のほうを優先して幅を返すようになります。
で、32文字とすると、推奨幅は親コンポーネントの幅200を越えてしまい
ますので、レイアウト時に無視されてしまうようです。
最小サイズを指定するのに抵抗があるようでしたら、
JTextFieldでgetPreferredSizeをオーバライドして、固定値を
返すようにしても良いかもしれません。
    • good
    • 0

#No.1です。

何度もすみません。
あれ??変わらないですか??おかしいですね?私の環境では動いてるんですが・・
いちおう、サンプルプログラム置いておきます。意味ないかもしれませんが。
これ以上書きこむと混乱させるだけなので止めておきます。上級者の方あとお願いします。すみませんでした。
●アプレット
import java.awt.*;
import javax.swing.*;

public class test1 extends JApplet
{


public void init()
{
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
getContentPane().setLayout(gridbag);
JTextField text = new JTextField();
c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
text.setPreferredSize(new Dimension(60,20));
gridbag.setConstraints(text,c);
getContentPane().add(text);


}
}

●アプレットじゃない方
import java.awt.*;
import javax.swing.*;

public class test2
{
public static void main(String args[])
{
JFrame win = new JFrame();
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setBounds(10,10,400,300);

GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
win.getContentPane().setLayout(gridbag);

JTextField text = new JTextField();
c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
text.setPreferredSize(new Dimension(60,20));
gridbag.setConstraints(text,c);
win.getContentPane().add(text);
win.show();

}
}
    • good
    • 0

#No1です。

トンチンカンナ回答をしてすみませんでした。
勉強しなおして!
setPreferredSize();
これでいけるとおもいます。


JTextField text = new JTextField();
c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
text.setPreferredSize(new Dimension(30,20));

たぶん動くとおもいます。できなかったら再びすみません。勉強不足ですみません!

参考URL:http://www.tu-chemnitz.de/global-text/doc/java/t …

この回答への補足

どうも、ありがとうございます。text.setPreferredSize(new Dimension(30,20));
をつけても、なにも変わらないですね。

補足日時:2005/05/11 00:12
    • good
    • 0

あまり良い方法ではありませんが、


> gridBagConstraints2.fill をnullにしたまま
ということなら、jTextFieldにsetMinimumSizeで最小サイズを設定してしまうというのはどうでしょう?
(setPreferredSizeでは効かないと思うので・・・)

Dimension dm = jTextField.getMinimumSize();
jTextField.setMinimumSize( new Dimension(100,dm.height ) );

この回答への補足

質問文に間違えがあったので、訂正します。
> gridBagConstraints2.fill をnullにしたまま
gridBagConstraints2.fill をNONEにしたままの間違えです。

補足日時:2005/05/09 15:36
    • good
    • 0

私も同様のことでなやんでいましたが、


gridBagConstraints2.fill = java.awt.GridBagConstraints.NONE;
これを、gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH;
または、gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
で解決できないでしょうか?
わたしは、JAVA初心者なので、参考にならないかもしれませんが・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!