私を混乱させる問題のためにいくつかの助けを得ることを望みます。getPreferredSize()はJFrameで動作します。なぜそれがフレームで動作しないのですか?
getPreferredSize()
をFrame
およびFrame
で試験した。 Frame
では、getPreferredSize()
はすべて0(幅と高さの両方)を返しますが、Frame
ではゼロ以外の数値を返します。
は、私が推奨サイズが設定されていない意味getPreferredSize()
は、単に0を返すようにnolayout()
方法、およびisPreferredSizeSet()
戻りFALSE
、で私のコーディングのどの部分を確認していません。
なぜ設定されていませんか?誰も助けることができますか?ありがとう。
以下は、この簡単なテストプログラムのコーディングです。
import java.awt.*;
import javax.swing.*;
public class test {
public test(){
JFrame frame = new JFrame("AbsoluteLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container p = frame.getContentPane();
p.setLayout(null);
JButton b1 = new JButton("one");
p.add(b1);
Dimension size = b1.getPreferredSize();
System.out.println("size width is "+size.width+" height is "+size.height);
JLabel label2 = new JLabel("Text-Only Label");
p.add(label2);
size = label2.getPreferredSize();
System.out.println("label size width is "+size.width+" height is "+size.height);
Insets insets = p.getInsets();
frame.setSize(300 + insets.left + insets.right, 125 + insets.top + insets.bottom);
frame.setVisible(true);
}
public static void main(String[] args) {
test t = new test();
nolayout();
}enter code here
public static void nolayout() {
Frame f = new Frame();
f.setLayout(null);
Insets its = f.getInsets();
System.out.println("its left, "+its.left+" right, "+its.right+" top "+its.top+" bottom "+its.bottom);
f.setLocation(200, 100);
f.setSize(its.left+its.right+300,its.top+its.bottom+200);
Label l1 = new Label("Enter Integer to be added : ",Label.RIGHT);
TextField t1 = new TextField("0",10);
f.add(l1);
f.add(t1);
System.out.println("is l1 preferred size set "+l1.isPreferredSizeSet());
Dimension sz = l1.getPreferredSize();
l1.setBounds(its.left + 10, its.top + 10, sz.width, sz.height);
System.out.println("label 1 width "+sz.width+" height " +sz.height);
sz = t1.getPreferredSize();
t1.setBounds(its.left + 100, its.top + 10, sz.width, sz.height);
System.out.println("Text 1 width "+sz.width+" height " +sz.height);
f.setVisible(true);
}
}
次のようにコマンドウィンドウの出力は次のようになります。
C:\JAVAPR>java test
size width is 55 height is 26
label size width is 88 height is 16
its left, 0 right, 0 top 0 bottom 0
is l1 preferred size set false
label 1 width 0 height 0
Text 1 width 0 height 0 enter code here
'p.setLayout(NULL);' 1)は、Java GUIは「異なるOS上で動作する必要があり、画面サイズ、異なるロケールに異なるPLAFsを用いて等画面解像度。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 2)「コードブロックの括弧の検出/修正」(http://meta.stackexchange.com/q/251795/155831)を参照して、修正できなくなった問題を解決してください。 –
* "なぜフレームで動かないのですか?" * AWTベースなので、(少なくともあなた以外の)誰も見ていないのです。 –
クロスポストを終了:http://www.coderanch.com/t/666218/java/java/getPreferredSize-works-JFrame-doesn-work – camickr