当我处理一个简单的学校Java GUI项目时,遇到了一个问题。 我有一个jframe没有布局,包括jpanel的jscrollpane和jpanel也没有布局,并且jbutton添加到了jpanel中。 问题是,当我调整jframe的大小时,如果未图标化,取消定义,失去焦点或未在按钮的边界内输入鼠标,则按钮将消失并且不会出现。
注意:以下代码不是全部代码。 它只是显示问题的代码的一部分。要对其进行测试,只需将粘贴复制到您的IDE中即可。 如您所见,代码中有1个以上的jscrollpane。 我试图用一个jscrollpane运行,问题仍然存在。 我还尝试添加布局除jbutton以外的所有组件,并且在代码中您可以看到注释行,这些注释行将布局添加到组件并调整其大小。 要测试布局表单,只需删除具有“无布局”注释的行,然后删除其他注释行的注释行功能。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
public class MyForm extends JFrame{
ArrayList contPList;
ArrayList contList;
DenemeForm(){
Toolkit toolkit= getToolkit();
Dimension screen = toolkit.getScreenSize();
setSize(screen.width*80/100,screen.height*80/100); // without layout
//setPreferredSize(new Dimension(screen.width*80/100,screen.height*80/100));
//pack();
setLocation(screen.width/2-getWidth()/2, screen.height/2-getHeight()/2);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLayout(null); // without layout
//setLayout(new FlowLayout());
setMinimumSize(new Dimension(getWidth()*2/3,getHeight()*2/3));
Container cPane = getContentPane();
//////////////////////////////////////////////////////////////////////////////
contPList = new ArrayList();
contList=new ArrayList();
for(int i=0;i<5;i++) {
JButton b = new JButton("button"+i);
JPanel contP = new JPanel();
JScrollPane cont = new JScrollPane(contP);
contP.add(b);
cont.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
cont.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
contP.setLayout(null);// without layout
//contP.setLayout(new FlowLayout());
contList.add(cont);
contPList.add(contP);
b.setSize(100, 100);//without layout
//b.setPreferredSize(new Dimension(100, 100));
cont.add(contP);
add(cont);
cont.setVisible(false);
}
contList.get(0).setVisible(true);
//////////////////////////////////////////////////////////////////////////////
addComponentListener(new ComponentListener(){
public void componentResized(ComponentEvent e){
for(int i=0;i<5;i++) {
contList.get(i).setSize(400,400); // without layout
contPList.get(i).setSize(400,400); // without layout
//contList.get(i).setPreferredSize(new Dimension(cPane.getWidth()/10,cPane.getHeight()/2));
//contPList.get(i).setPreferredSize(new Dimension(cPane.getWidth()/10,cPane.getHeight()/2));
//contPList.get(i).setSize(contPList.get(0).getPreferredSize());
}
revalidate();
repaint();
}
});
//////////////////////////////////////////////////////////////////////////////
setVisible(true);
}
}