Java-覆盖绘制(图形g)方法,来自>;变量<;
我的类中有一个Java-覆盖绘制(图形g)方法,来自>;变量<;,java,awt,overriding,paint,Java,Awt,Overriding,Paint,我的类中有一个Canvas变量。如何从Canvas重写paint()方法?。我知道您可以创建一个单独的类并扩展Canvas,但在这种情况下,我希望保留我的变量 //This is the method i am looking for public void paint(Graphics g) { super.paint(g) } 这是我的班级: private JFrame frame; private Canvas canvas; public SimpleSkinCr
Canvas
变量。如何从Canvas
重写paint()
方法?。我知道您可以创建一个单独的类并扩展Canvas
,但在这种情况下,我希望保留我的变量
//This is the method i am looking for
public void paint(Graphics g) {
super.paint(g)
}
这是我的班级:
private JFrame frame;
private Canvas canvas;
public SimpleSkinCreator() {
canvas = new Canvas();
canvas.setPreferredSize(new Dimension(WIDTH, HEIGHT));
canvas.setBackground(Color.black);
canvas.setFocusable(true);
canvas.requestFocus();
frame = new JFrame("AvarionDE's - SimpleSkinEditor");
frame.add(canvas);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
首先,避免在Swing GUI中使用Canvas和AWT组件,而是使用JPanel并覆盖其paintComponent。如果需要,您可以通过以下方式轻松完成:
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;
public class OverridePaintComponent extends JPanel {
private static final int PREF_W = 400;
private static final int PREF_H = PREF_W;
public OverridePaintComponent() {
// TODO add junk to GUI
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// draw here
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("OverridePaintComponent");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new OverridePaintComponent());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
首先,避免在Swing GUI中使用Canvas和AWT组件,而是使用JPanel并覆盖其paintComponent。如果需要,您可以通过以下方式轻松完成:
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;
public class OverridePaintComponent extends JPanel {
private static final int PREF_W = 400;
private static final int PREF_H = PREF_W;
public OverridePaintComponent() {
// TODO add junk to GUI
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// draw here
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("OverridePaintComponent");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new OverridePaintComponent());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
您可以使用匿名类:
canvas = new Canvas() {
@Override
public void paint() {
super.paint();
// your code here
}
};
你确定这就是你想做的吗?我建议使用Swing和Swing API,不要直接修改
paint()
,除非您知道自己在做什么。您可以使用匿名类:
canvas = new Canvas() {
@Override
public void paint() {
super.paint();
// your code here
}
};
你确定这就是你想做的吗?我建议使用Swing和Swing API,不要直接修改paint()
,除非您知道自己在做什么