1

我可以用来给出JFramewith的绝对主义最小代码是Graphics多少?,例如,我可以摆脱这种paint()方法吗?,我需要打电话super.update(g)吗?

4

2 回答 2

3

你不应该覆盖paint()。这通常适用于 AWT。

您不应该触摸 update()。这同样适用于 AWT。

在 Swing 中,您覆盖paintComponent()a JPanel(或JComponent) 的方法并将面板添加到框架中。

你根本不碰JFrame

阅读有关自定义绘画的 Swing 教程以获取更多信息和示例。

于 2013-05-21T16:54:19.433 回答
0

paint() 方法仍然可用于在 JFrame 中覆盖。更好的解决方案是添加一个扩展 JPanel 并覆盖“paintComponent(Graphics g)”方法的小类,作为绘制形状的画布。然后,您只需将该面板作为另一个组件添加到您的 JFrame 中。为了更新内容,您可以调用 repaint() 方法。例如:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DoNotEnterSign extends JPanel {
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Point center = new Point(getWidth() / 2, getHeight() / 2);
    int radius = Math.min(getWidth() / 2, getHeight() / 2) - 5;
    int innerRadius = (int)(radius * 0.9);
    int barWidth = (int)(innerRadius * 1.4);
    int barHeight = (int)(innerRadius * 0.35);
    g.fillRect(center.x - barWidth/2, center.y - barHeight/2,
               barWidth, barHeight);
}

public static void main(String[] args) {
    JFrame frame = new JFrame("A simple graphics program");
    frame.setSize(400, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new DoNotEnterSign();
    panel.setBackground(Color.GREEN.darker());
    frame.getContentPane().add(panel, BorderLayout.CENTER);
    frame.setVisible(true);
}}

这是 Swing 类的基本组件。虽然可以有更简单的解决方案。现在您可能不必更新()东西,例如,如果您有一个文本区域,您可以在其中输入文本和一个按钮以转换为大写然后

public void actionPerformed(ActionEvent e) {
                area.setText(area.getText().toUpperCase());

一旦找到 setTextarea() 就会更新自己

于 2013-05-21T17:24:10.373 回答