gpt4 book ai didi

java - 绘制组件图未出现在框架上

转载 作者:行者123 更新时间:2023-11-30 06:13:50 24 4
gpt4 key购买 nike

我有以下类(面板类)和一个主类(Main class),显示在面板类下方。该代码假定显示 paintComponent 方法内的文本。虽然框架打开并显示我提供的标题,但它不显示来自 paintComponent 的字符串。我按照Java网站上的教程编写了代码,但不知道为什么它不起作用。

面板

package com.learn.java;
import javax.swing.*;
import java.awt.*;

class panel extends JPanel {

public void paintComponent(Graphics g) {

super.paintComponents(g);
g.drawString("From Paint Component Method ", 10, 20);

}
}

主要

package com.learn.java;

import javax.swing.*;
import java.awt.*;

public class Main {

public static void main(String[] args) {
JFrame Frame = new JFrame("The big Title");
Frame.setLayout(new FlowLayout());
Frame.setSize(850, 800);
Frame.setVisible(true);
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frame.add(new panel());
}

}

最佳答案

代码有很多问题,注释中建议的解决方案并不是最优的。

首先,自定义绘制组件中的绘制链被破坏。重写的方法需要调用 super 方法,而是调用“复数”版本。要修复它,请更改:

super.paintComponents(g);

致:

super.paintComponent(g);

现在讨论上述问题。摆脱 FlowLayout 隐藏了问题,因为虽然流布局尊重组件的首选大小(并且不拉伸(stretch)它们),但 JFrame 的默认布局(BorderLayout )会拉伸(stretch)组件以填充可用空间。

正确的方法是让自定义绘制组件覆盖 getPreferredSize() 方法。然后它将按预期显示在流布局中。

处理完毕后,删除:

Frame.setSize(850, 800);

既然这只是猜测..那就移动吧..

Frame.setVisible(true);

在最后一个语句及其之前,输入..

Frame.pack(); // make the GUI the correct size

进一步提示:请学习常见的 Java 命名法(命名约定 - 例如 EachWordUpperCaseClassfirstWordLowerCaseMethod()firstWordLowerCaseAttribute,除非它是 UPPER_CASE_CONSTANT)并一致地使用它。

关于java - 绘制组件图未出现在框架上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49661243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com