Java Swing点击绘制文本按钮无效,仅调整窗口大小时生效如何解决
问题根因
你在按钮点击事件中调用的repaint()是lowerPanel类的成员方法,默认只会触发底部按钮所在面板的重绘。而文本绘制逻辑写在centralPanel的paintComponent方法中,只有中心面板自身触发重绘时才会执行该逻辑。调整窗口大小时会触发整个窗体所有子组件的重绘,所以此时文本才会正常显示。
修复方案
- 第一步:将
centralPanel的实例从justAnyFrame构造方法的局部变量,提升为justAnyFrame的全局成员变量,确保内部类lowerPanel可以访问到中心面板实例 - 第二步:修改按钮点击事件的触发逻辑,将原来调用当前
lowerPanel的repaint(),改为调用centralPanel实例的repaint()方法,主动触发中心面板的重绘逻辑
修改后的核心代码
调整justAnyFrame类的成员定义
class justAnyFrame extends JFrame { private JButton bDrawText; private boolean drawNow=false; // 新增centralPanel作为成员变量 private centralPanel cp; public justAnyFrame(String title,int left,int top,int width,int height) { setTitle(title); setLocation(left,top); setSize(width,height); // 给成员变量cp赋值 cp=new centralPanel(); cp.setBackground(Color.LIGHT_GRAY); add(cp,BorderLayout.CENTER); lowerPanel lp=new lowerPanel(); add (lp, BorderLayout.SOUTH); }
调整按钮点击事件逻辑
public void actionPerformed(ActionEvent e) { Object clicked=e.getSource(); if(clicked==bDrawText) { drawNow=true; // 调用中心面板的重绘方法 cp.repaint(); } }
规范优化建议
给重写的paintComponent方法加上@Override注解,避免方法签名写错导致重写失效的问题。
内容的提问来源于stack exchange,提问作者4ulls
相关产品推荐
相关产品推荐

