Java 设置函数大小会造成混乱
这段代码运行得很好。但是当我放置Java 设置函数大小会造成混乱,java,swing,jframe,Java,Swing,Jframe,这段代码运行得很好。但是当我放置setSize(700700)并运行代码时,它不会显示JButtons,而只显示框架。我认为JButtons的网格布局可能存在一些问题,因此我将每个gridlayout的最后两个条目更改为,比如gridlayout(3,1300300)。但是,结果是相同的(即没有可见的jbutton)。为什么会这样 import java.awt.*; import javax.swing.*; public class Calculator extends JFrame {
setSize(700700)
并运行代码时,它不会显示JButtons,而只显示框架。我认为JButtons的网格布局可能存在一些问题,因此我将每个gridlayout的最后两个条目更改为,比如gridlayout(3,1300300)
。但是,结果是相同的(即没有可见的jbutton)。为什么会这样
import java.awt.*;
import javax.swing.*;
public class Calculator extends JFrame
{
JButton jb[]=new JButton[12];
public Calculator(String title)
{
super(title);
Container c;
c=getContentPane();
setSize(100,100);
setVisible(true);
Panel p1=new Panel();
for(int h=0;h<9;h++)
{jb[h]=new JButton(""+(h+1));}
jb[9]=new JButton("=");
jb[10]=new JButton(".");
jb[11]=new JButton("0");
p1.setLayout(new GridLayout(4,3,3,3));
for(int h=0;h<12;h++){p1.add(jb[h]);}
Panel p2=new Panel(new GridLayout(3,1,3,3));
JButton jb1[]=new JButton[3];
jb1[0]=new JButton("+");
jb1[1]=new JButton("-");
jb1[2]=new JButton("*");
for(int i=0;i<3;i++){
p2.add(jb1[i]);}
Panel p4=new Panel(new GridLayout(3,1,3,3));
JButton jb4[]=new JButton[3];
jb4[0]=new JButton("%");
jb4[1]=new JButton("/");
jb4[2]=new JButton("-");
for(int i=0;i<3;i++){
p4.add(jb4[i]);}
Panel p3=new Panel();
JLabel jl0=new JLabel("INPUT:");
TextField tf=new TextField(30);
p3.add(tf);
p3.add(jl0);
jl0.setLayout(new FlowLayout(FlowLayout.LEFT));
c.add(BorderLayout.CENTER,p1);
c.add(BorderLayout.EAST,p2);
c.add(BorderLayout.WEST,p4);
c.add(BorderLayout.NORTH,p3);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[])
{new Calculator("Lets calculate ! :)");}
}
import java.awt.*;
导入javax.swing.*;
公共类计算器扩展JFrame
{
JButton jb[]=新JButton[12];
公共计算器(字符串标题)
{
超级(标题);
容器c;
c=getContentPane();
设置大小(100100);
setVisible(真);
面板p1=新面板();
对于(int h=0;h您必须在方法末尾(添加按钮后)设置setVisible(true)。您必须在方法末尾(添加按钮后)设置setVisible(true)。因为setSize()
会使组件层次结构无效,请参阅:
您需要重新验证它
为此,您可以在最后再次调用revalidate();
甚至setVisible(true)
最好先调用pack();
,然后再调用setVisible(true);
,而不是在向jframe添加任何组件之前调用setVisible()
。因为setSize()
会使组件层次结构无效,请参阅:
您需要重新验证它
为此,您可以在最后再次调用revalidate();
甚至setVisible(true)
最好先调用pack();
,然后再调用setVisible(true);
,而不是在将任何组件添加到jframe之前调用setVisible()
。您使用的是setSize(100100);
这会创建一个非常小的窗口。相反,请使用pack()在构造器的末尾使用
将框架与面板匹配。您正在使用
设置大小(100100);创建一个非常小的窗口。相反,在构造器的末尾使用打包();将框架与面板匹配。因此…设置可见(true)是否使框架可见而不是按钮?但当使用GridLayout(3,1,3,3)设置大小(100100)时,按钮不可见,但在我将其最大化后变为可见。为什么它们不保持不可见?在最大化窗口时,按钮会自行改变其大小。但在设置大小(700700)的情况下,在最小化时,它们变得可见?为什么?这就是我在ans中告诉你的,你的setSize使jFrame的组件层次结构无效,resize事件再次验证它,因此按钮再次可见。所以…setVisible(true)使框架可见,而不是按钮?但是当setSize(100100)与GridLayout(3,1,3,3)一起时,按钮不可见,但在我将其最大化后变为可见。为什么它们不保持不可见?在最大化窗口时,按钮会自行改变其大小。但在设置大小(700700)的情况下,在最小化时它们变得可见?为什么如此?这就是我在ans中告诉你的,你的setSize使jFrame的组件层次结构无效,resize事件再次验证它,因此按钮再次可见。是的..这给了我一个很酷的输出!:)但我不得不使用show();也为了显示GUI.pack();只是在等待数据。但是,谢谢!我有一个新东西要学(即pack())。是的……这给了我一个很酷的输出!:)但是我不得不使用show();也是为了显示GUI。pack();只是在等待数据。但是,谢谢!我有一个新东西要学(即pack())。