![](/img/trans.png)
[英]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.