使用JFrame
Graphics
时,我可以使用什么绝对主义最小代码? ,例如我可以摆脱paint()
方法吗? ,我需要拨打super.update(g)
吗?
答案 0 :(得分:3)
你不应该覆盖paint()。这通常是针对AWT的。
您不应该触摸update()。这也适用于AWT。
在Swing中,您可以覆盖paintComponent()
(或JPanel
)的JComponent
方法,并将面板添加到框架中。
您根本不接触JFrame
。
阅读Custom Painting上的Swing教程,了解更多信息和示例。
答案 1 :(得分: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类的基本组件。虽然可以有更简单的解决方案。 现在你可能不必更新()的东西,例如,如果你有一个textarea你可以输入文本和一个按钮转换为大写然后
public void actionPerformed(ActionEvent e) {
area.setText(area.getText().toUpperCase());
一旦找到setTextarea(),就会自动更新