You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:45:04