[菜鸟问题]我遇到一个很奇怪的问题,请大家帮忙看一看!谢谢!

时间:2022-08-16 14:15:39
1. import java.awt.*;
2. import javax.swing.*;
3.
4. public class Lotto extends JFrame
5. {
6.    JPanel row1=new JPanel();
7.    ButtonGroup option=new ButtonGroup();
8.    JCheckBox quickpick=new JCheckBox("Quick Pick ",false);
9.    JCheckBox personal=new JCheckBox("Personal", true);
10.
11.   JPanel row2=new JPanel();
12.   JLabel numbersLabel =new JLabel("Your picks: ",JLabel.RIGHT);
13.   JTextField[] numbers=new JTextField[6];
14.   JLabel winnersLabel=new JLabel("Winners: ", JLabel.RIGHT);
15.   JTextField[] winners=new JTextField[6];
16.
17.   JPanel row3=new JPanel();
18.   JButton stop=new JButton("stop");
19.   JButton play=new JButton("Play");
20.   JButton reset=new JButton("Reset");
21.
22.   JPanel row4=new JPanel();
23.   JLabel got3Label=new JLabel("3 of 6: ", JLabel.RIGHT);
24.   JTextField got3=new JTextField();
25.   JLabel got4Label=new JLabel("4 of 6: ", JLabel.RIGHT);
26.   JTextField got4=new JTextField();
27.   JLabel got5Label=new JLabel("5 of 6: ", JLabel.RIGHT);
28.   JTextField got5=new JTextField();
29.   JLabel got6Label=new JLabel("6 of 6: ", JLabel.RIGHT);
30.   JTextField got6=new JTextField(10);
31.   JLabel drawingsLabel=new JLabel("Drawings: ", JLabel.RIGHT);
32.   JTextField drawings=new JTextField();
33.   JLabel yearsLabel=new JLabel("Years: ",JLabel.RIGHT);
34.   JTextField  years=new JTextField();
35.
36.   public Lotto()
37.   {
38.     super("Lotto Madness");
39.  setSize(550,270);
40. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
41. GridLayout layout=new GridLayout(5,1,10,10);
42. Container pane=getContentPane();
43.
44. pane.setLayout(layout);
45.
46. FlowLayout layout1=new FlowLayout(FlowLayout.CENTER,10,10);
47. option.add(quickpick);
48. option.add(personal);
49. row1.setLayout(layout1);
50. row1.add(quickpick);
51. row1.add(personal);
52. pane.add(row1);
53.
54. GridLayout layout2=new GridLayout(2,7,10,10);
55. row2.setLayout(layout2);
56. //row2.setLayout(layout2);
57. row2.add(numbersLabel);
58. for (int i=0;i<6;i++)
59. {
60.     numbers[i]=new JTextField();
61.     row2.add(numbers[i]);
62.     
63. }
64.
65. row2.add(winnersLabel);
66. for(int i=0;i<6;i++)
67. {
68.     winners[i]=new JTextField();
69.     winners[i].setEditable(true);
70.     row2.add(winners[i]);
71. }
72. pane.add(row2);
73.
74. FlowLayout layout3=new FlowLayout(FlowLayout.CENTER,10,10);
75. row3.setLayout(layout3);
76. row3.setEnabled(false);
77. row3.add(stop);
78. row3.add(play);
79. row3.add(reset);
80. pane.add(row3);
81.
82. GridLayout layout4=new GridLayout(2,3,20,10);
83. row4.setLayout(layout4);
84. row4.setLayout(layout4);
85. row4.add(got3Label);
86. got3.setEditable(false);
87. row4.add(got3);
88. row4.add(got4Label);
89. got4.setEditable(false);
90. row4.add(got4);
91. row4.add(got5Label);
92. got5.setEditable(false);
93. row4.add(got5);
94. row4.add(got6Label);
95. got6.setEditable(false);
96. row4.add(got6);
97. row4.add(drawingsLabel);
98. drawings.setEditable(false);
99. row4.add(drawings);
100. row4.add(yearsLabel);
101. years.setEditable(false);
102. row4.add(years);
103. pane.add(row4);
104. setContentPane(pane);
105. setVisible(true);
106.   }
107.   public static void main(String[] arguments)
108.   {
109. Lotto frame=new Lotto();
110.   }
111.}

我把第82和54行代码,分别改为:GridLayout layout4=new GridLayout(2,6,20,10);   和GridLayout layout2=new GridLayout(2,6,10,10);
 
PS:只改了GridLayout()的第二个参数,我把第二个参数改为任意数,都没有变化,这是怎么回事?
还有就是GridLayout()具体实干什么的给我讲讲吧?!

14 个解决方案

#1


你类从新编译了没有?
我刚才就碰到这个问题, 哈哈

#2


要重新编译才能看出变化!
The GridLayout class is a layout manager that lays out a container's components in a rectangular grid. The container is divided into equal-sized rectangles, and one component is placed in each rectangle.

#3


同意楼上的

#4


我重新编译了呀,
编译是指:javac LottoMadness吧?!

#5


重新编译之后还有问题马 ?

#6


不是有问题,而是为什么我把那个参数改变后没有变化呢?
我把GridLayout()的第二个参数改变为其他的数字都没有任何变化,这是为什么?

#7


对"大鱼吃小鱼,小鱼吃虾米,虾米吃什么?" 和“半边海”你们对GridLayout()的定义确定吗?

#8


如果所加入的component数量大于grids的数量,columns将自动扩充
比如:你定义了一个3行2列的布局,而你加入了9个组件
      则,你的布局会自动扩充成3行3列

#9


可能是没有重新编译,呵呵

#10


對"我不會編程",如果按你這種說法﹐只要定了几行的話﹐列就自己定義了。


對"整狼專家"﹐我重新編譯過了。
不信的話﹐你自己試試﹗

#11


import java.awt.*;
import javax.swing.*;

public class Lotto extends JFrame
{
   JLabel numbersLabel =new JLabel("Your picks: ",JLabel.RIGHT);
   JTextField[] numbers=new JTextField[6];
   JLabel winnersLabel=new JLabel("Winners: ", JLabel.RIGHT);
   JTextField[] winners=new JTextField[6];
   public  Lotto()
   {
super("Lotto ");
  setSize(550,270);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout=new GridLayout(2,7,10,10);
Container pane=getContentPane();
pane.setLayout(layout);


pane.setLayout(layout);
//row2.setLayout(layout2);
pane.add(numbersLabel);
for (int i=0;i<6;i++)
{
    numbers[i]=new JTextField();
    pane.add(numbers[i]);
    
}

pane.add(winnersLabel);
for(int i=0;i<6;i++)
{
    winners[i]=new JTextField();
    winners[i].setEditable(false);
    pane.add(winners[i]);
}
setVisible(true);
setContentPane(pane);
     }
     public static void main(String[] arguments)
     {
Lotto lo=new Lotto();
      }
}

我现在越来越不明白了,我把GridLayout layout=new GridLayout(2,7,10,10);中GridLayout()中的前两个参数更改,发现特别有意思的情况出现了。
我把改成GridLayout layout=new GridLayout(5,1,10,10);
他运行时出现的是5行3列。
如果我把它改成GridLayout layout=new GridLayout(8,1,10,10);
他运行时出现的是7行2列。
如果我把它改成GridLayout layout=new GridLayout(14,1,10,10);
他运行时出现的是14行1列。
这到底是怎么回事呢?
难道是由它本身决定的吗?


#12


你再仔细想想我的话!
你总共添加了14个组件
2行7列时,刚好,不出现任何问题
5行1列时,不够,至少要扩充到3列,所以是5行3列
8行1列时,不够,扩充到2列,因为加入组件是逐行添加的(从先添加的是editable的textfield,后添加的是uneditable的textfield可以看出),所以第8行没有组件可加了
这是出现的是8行2列,第8行存在,只是没有组件,你误认为只有7行
14行1列,当然也正常

#13


§&Uacute;

#14


對'我不會編程'
你能給我解釋一下﹐
GridLayout()的定義嗎﹖
謝謝﹗

#1


你类从新编译了没有?
我刚才就碰到这个问题, 哈哈

#2


要重新编译才能看出变化!
The GridLayout class is a layout manager that lays out a container's components in a rectangular grid. The container is divided into equal-sized rectangles, and one component is placed in each rectangle.

#3


同意楼上的

#4


我重新编译了呀,
编译是指:javac LottoMadness吧?!

#5


重新编译之后还有问题马 ?

#6


不是有问题,而是为什么我把那个参数改变后没有变化呢?
我把GridLayout()的第二个参数改变为其他的数字都没有任何变化,这是为什么?

#7


对"大鱼吃小鱼,小鱼吃虾米,虾米吃什么?" 和“半边海”你们对GridLayout()的定义确定吗?

#8


如果所加入的component数量大于grids的数量,columns将自动扩充
比如:你定义了一个3行2列的布局,而你加入了9个组件
      则,你的布局会自动扩充成3行3列

#9


可能是没有重新编译,呵呵

#10


對"我不會編程",如果按你這種說法﹐只要定了几行的話﹐列就自己定義了。


對"整狼專家"﹐我重新編譯過了。
不信的話﹐你自己試試﹗

#11


import java.awt.*;
import javax.swing.*;

public class Lotto extends JFrame
{
   JLabel numbersLabel =new JLabel("Your picks: ",JLabel.RIGHT);
   JTextField[] numbers=new JTextField[6];
   JLabel winnersLabel=new JLabel("Winners: ", JLabel.RIGHT);
   JTextField[] winners=new JTextField[6];
   public  Lotto()
   {
super("Lotto ");
  setSize(550,270);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout=new GridLayout(2,7,10,10);
Container pane=getContentPane();
pane.setLayout(layout);


pane.setLayout(layout);
//row2.setLayout(layout2);
pane.add(numbersLabel);
for (int i=0;i<6;i++)
{
    numbers[i]=new JTextField();
    pane.add(numbers[i]);
    
}

pane.add(winnersLabel);
for(int i=0;i<6;i++)
{
    winners[i]=new JTextField();
    winners[i].setEditable(false);
    pane.add(winners[i]);
}
setVisible(true);
setContentPane(pane);
     }
     public static void main(String[] arguments)
     {
Lotto lo=new Lotto();
      }
}

我现在越来越不明白了,我把GridLayout layout=new GridLayout(2,7,10,10);中GridLayout()中的前两个参数更改,发现特别有意思的情况出现了。
我把改成GridLayout layout=new GridLayout(5,1,10,10);
他运行时出现的是5行3列。
如果我把它改成GridLayout layout=new GridLayout(8,1,10,10);
他运行时出现的是7行2列。
如果我把它改成GridLayout layout=new GridLayout(14,1,10,10);
他运行时出现的是14行1列。
这到底是怎么回事呢?
难道是由它本身决定的吗?


#12


你再仔细想想我的话!
你总共添加了14个组件
2行7列时,刚好,不出现任何问题
5行1列时,不够,至少要扩充到3列,所以是5行3列
8行1列时,不够,扩充到2列,因为加入组件是逐行添加的(从先添加的是editable的textfield,后添加的是uneditable的textfield可以看出),所以第8行没有组件可加了
这是出现的是8行2列,第8行存在,只是没有组件,你误认为只有7行
14行1列,当然也正常

#13


§&Uacute;

#14


對'我不會編程'
你能給我解釋一下﹐
GridLayout()的定義嗎﹖
謝謝﹗