java光标插入取消_java - 在调整窗口大小直到将鼠标光标移到按钮上之后,添加到JScrollPane的JPanel中的JButton消失。 我怎样才能解决这个问题? - 堆栈内存溢出...

作者在实现Java GUI项目时遇到按钮在特定情况下消失的问题。该问题发生在调整窗口大小时,即使按钮已添加到面板上。代码示例展示了使用JFrame、JPanel、JScrollPane和JButton等组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我处理一个简单的学校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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值