import java.awt.*;
import java.awt.event.*;public class CoppyStringToLabel extends Frame implements ActionListener
{
private Label label = new Label();
private TextField field = new TextField();

private Button b = new Button("复制"); private class WindowCloser extends WindowAdapter
{
public void windowClosing(WindowEvent we)//guan bi chuang kou
{
System.exit(0);
}
}
public CoppyStringToLabel()
{
super("拷贝标签(字符)");
 
setup();//shezhi b.addActionListener(this);
addWindowListener(new WindowCloser()); }
public void actionPerformed (ActionEvent e)
{
if (e.getSource() == b)
label.setText(field.getText()); }
private void setup()
{
Panel textGrid = new Panel(); textGrid.setLayout(new BorderLayout());

textGrid.add(label); textGrid.add(field);


setLayout(new BorderLayout());
add("Center",textGrid);
add("south",b);
pack();
}
public static void main(String[] args) 
{
CoppyStringToLabel a = new CoppyStringToLabel();
 

}
}
这个是书上的例子我试着编译通过但运行不通过
Exception in thread "main" java.lang.IllegalArgumentException: cannot add to lay
out: unknown constraint: south
        at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:446)
        at java.awt.BorderLayout.addLayoutComponent(BorderLayout.java:407)
        at java.awt.Container.addImpl(Container.java:1058)
        at java.awt.Container.add(Container.java:364)
        at CoppyStringToLabel.setup(CoppyStringToLabel.java:51)
        at CoppyStringToLabel.<init>(CoppyStringToLabel.java:24)
        at CoppyStringToLabel.main(CoppyStringToLabel.java:58)
请按任意键继续. . .所以我就进行了一下修改
虽然运行通过了
我还不太明白为什么这样改..
我想把文本框的大小调整应该在哪个位置添如代码,,
我试着调试没有得到自己想要的结果
 请高手 帮忙看看..感激不尽...
import java.awt.*;
import java.awt.event.*;public class CoppyStringToLabel extends Frame implements ActionListener
{
private Label label = new Label();
private TextField field = new TextField();

private Button b = new Button("复制"); private class WindowCloser extends WindowAdapter
{
public void windowClosing(WindowEvent we)//guan bi chuang kou
{
System.exit(0);
}
}
public CoppyStringToLabel()
{
super("拷贝标签(字符)");
 
setup();//shezhi b.addActionListener(this);
addWindowListener(new WindowCloser()); }
public void actionPerformed (ActionEvent e)
{
if (e.getSource() == b)
label.setText(field.getText()); }
private void setup()
{
Panel textGrid = new Panel(); textGrid.setLayout(new FlowLayout());

textGrid.add(label); textGrid.add(field);


setLayout(new FlowLayout());
add("Center",textGrid);
add("south",b);
pack();
}
public static void main(String[] args) 
{
CoppyStringToLabel a = new CoppyStringToLabel();
 

}
}

解决方案 »

  1.   

    add("Center",textGrid);
    add("south",b);Exception in thread "main" java.lang.IllegalArgumentException: cannot add to lay
    out: unknown constraint: south
    未知常量嘛,实施BorderLayout.SOUTH或者类似的有时候布局管理器会使得设置控件大小无效,可以事事多个boxlayout来达到效果
      

  2.   

    import java.awt.*;
    import java.awt.event.*; class CoppyStringToLabel extends Frame implements ActionListener
    {
    private Label label = new Label();
    private TextField field = new TextField();private Button b = new Button("复制");private class WindowCloser extends WindowAdapter
    {
    public void windowClosing(WindowEvent we)//guan bi chuang kou
    {
    System.exit(0);
    }
    }
    public CoppyStringToLabel()
    {
    super("拷贝标签(字符)");
     
    setup();//shezhib.addActionListener(this);
    addWindowListener(new WindowCloser());}
    public void actionPerformed (ActionEvent e)
    {
    if (e.getSource() == b)
    label.setText(field.getText());}
    private void setup()
    {
    Panel textGrid = new Panel();textGrid.setLayout(new FlowLayout());textGrid.add(label);
    //加上这两行
    Dimension d =new Dimension(60,100);
    field.setPreferredSize(d);textGrid.add(field);
    setLayout(new FlowLayout());
    add("Center",textGrid);
    add("south",b);
    setVisible(true);
    pack();
    }
    public static void main(String[] args) 
    {
    CoppyStringToLabel a = new CoppyStringToLabel();
     }
    }
      

  3.   

    用了流式布局,就不能用setsize(),resize()方法了,
    其中的控件管理已经交给了布局管理器,该布局管理器会自动调用控件的setPreferredSize()方法来决定该控件的大小,也就是说要改变控件大小必须自己重设setPreferredSize(),方法如下:
    Dimension d =new Dimension(590,100);
    recordPane.setPreferredSize(d);