import javax.swing.*;
import java.awt.FlowLayout;public class Test {
public static void main(String[] args){

JFrame frame = new JFrame("My Frame");

JButton OKButton = new JButton("OK");
JButton CancelButton = new JButton("Cancel");



FlowLayout layout= new FlowLayout(FlowLayout.CENTER);
frame.setLayout(layout);
System.out.println(frame.toString());

frame.setSize(400,300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(OKButton);
frame.add(CancelButton); //((FlowLayout) frame.getLayout()).setAlignment(FlowLayout.LEFT); //这里会有无法转换错误
//frame.doLayout(); frame.setVisible(true);



}

}为什么输出的结果是javax.swing.JFrame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=My Frame,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]呢?难道setLayout没有把FlowLayout控件添加进去?

解决方案 »

  1.   

    public class Test {
    public static void main(String[] args) { JFrame frame = new JFrame("My Frame"); JButton OKButton = new JButton("OK");
    JButton CancelButton = new JButton("Cancel"); FlowLayout layout = new FlowLayout(FlowLayout.CENTER);
    frame.setLayout(layout); //
    //System.out.println(frame.toString());你这里加的这句干什么用啊 frame.setSize(400, 300);
    frame.setLocationRelativeTo(null);

    frame.add(OKButton);
    frame.add(CancelButton);

    //((FlowLayout) frame.getLayout()).setAlignment(FlowLayout.LEFT);//有些东西如果之间没有某种特定的关联那么强制转换也不行啊
    layout.setAlignment(FlowLayout.LEFT);//把上面换成这个
    frame.doLayout(); frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }}
      

  2.   

    用System.out.println(frame.toString());看一看layout有没有设置进去啊 我觉得layout应该是layout=java.awt.FlowLayout才对啊.....
      

  3.   


    按钮控件最好还是加到模板Panel上吧,然后再将模板Panel加到框架Frame上