我可以在 Jpanel 上使用图形 g 绘画吗?如果可以的话,它是如何工作的?



我可以在 Jpanel 上使用图形 g 绘画吗?如果可以的话,它是如何工作的?

JPanel Game = new JPanel();
Game.setLayout(null);
Game.setLocation(0,0);
Game.setSize(500,700);
Game.setBackground(Color.WHITE);
Game.setBorder(BorderFactory.createLineBorder(Color.black));

如何在此 Jpanel 上添加油漆组件

是的,对于自定义绘画,您必须对JPanel进行子类化,然后您必须覆盖第一行super.paintComponent(..)中的调用paintComponent

例:

JPanel game = new JPanel(){
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
//custom painting here
}
};
//game.setLayout(null); don't use null layout 
game.setLocation(0,0);
game.setSize(500,700);
game.setBackground(Color.WHITE);
game.setBorder(BorderFactory.createLineBorder(Color.black));

阅读更多 AWT 和 Swing 中的绘画 |在 Swing 中执行自定义绘画

注意:在 java 变量的名称中,按照惯例,以小写字母开头,遵循驼峰样式。所以Game应该game.

如果你想在一个组件上实现你自己的自定义绘画,你必须创建你自己的类来扩展该组件。您将从类似的东西开始

public class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
//Add your custom painting here
} 
}

然后,您可以将该面板与类似内容一起使用

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
System.out.println("Created GUI on EDT? " + SwingUtilities.isEventDispatchThread());
JFrame f = new JFrame("Demo");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}

最新更新