[英]Java JPanel Graphics - Understanding how to draw a simple shape
[英]Java - Graphics - adding another shape on JPanel
我有一个制作JFrame并在上面添加面板的类
第二个扩展了JPanel并在其上绘画
第一个(JFrame)
class MyWindow {
void qwe() {
JFrame frame = new JFrame("qwe");
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel panel = new MyPanel();
panel.setLayout(null);
frame.add(panel);}}
第二个(JPanel)
class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
g.drawRect(50,50,90,70);
}
public void addShape() {
Graphics g = this.getGraphics();
Graphics2D gg = (Graphics2D) g;
gg.drawString("qwe",20,20);}}
如何使用addShape()方法在JPanel上添加字符串?
不要使用组件的getGraphics()方法进行自定义绘制。 这种类型的绘画只是临时的,下次Swing确定需要绘画的组件时将丢失。
自定义绘画应始终在组件的paintComponent()方法中完成。
请参阅“ 自定义绘画方法”,以了解两个共同点是做您想做的事情。
作为@camickr观点的具体示例,请注意MyPanel
已经覆盖了paintComponent()
,因此您可以将对Graphics
上下文的引用传递给addShape()
。 另外,
确保调用super.paintComponent(g)
。
重写getPreferredSize()
以建立组件的首选大小。
只能在事件分发线程上构造和操作Swing GUI对象。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyWindow {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new MyWindow().qwe();
}
});
}
void qwe() {
JFrame frame = new JFrame("qwe");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel panel = new MyPanel();
panel.setLayout(null);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static class MyPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(50, 50, 90, 70);
addShape(g);
}
public void addShape(Graphics g) {
g.drawString("qwe", 20, 20);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.