[英]How do i ask paincomponent to draw things from other methods or classes
我想請 TestGraphics class 中的paintcomponent 畫一條線,我這樣做的方式只是給我一個 NullPointer 異常,如果你能告訴我我該怎么做,我將不勝感激
測試圖形 class:
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class TestGraphics extends JPanel {
public JPanel panel = new JPanel() {
public void paintComponent (Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawLine(120, 234, 23, 43);
}
};
}
主class:
import javax.swing.*;
public class Main {
static int width = 600;
static int height = 800;
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestGraphics p = new TestGraphics();
// draw Line
p.panel.getGraphics().drawLine(123, 23, 43, 21);
frame.add(p.panel);
frame.setSize(height, width);
frame.setVisible(true);
}
}
你只需要添加一個新的TestGraphics object,而不是調用“p.panel.getGraphics().drawLine(123,23,43,21);”。 以下是簡單的修復:
TestGraphics.java
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class TestGraphics extends JPanel {
public void paintComponent (Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawLine(120, 234, 23, 43);
}
}
和 Main.java
import javax.swing.*;
public class Main {
static int width = 600;
static int height = 800;
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestGraphics p = new TestGraphics();
// draw Line
frame.add(p);
frame.setSize(height, width);
frame.setVisible(true);
}
}
要立即解決問題,您需要刪除該行
p.panel.getGraphics().drawLine(123, 23, 43, 21);
因為您不允許在paintComponent()
drawLine()
) 。
改變
frame.add(p.panel);
至
frame.add(p);
和
public class TestGraphics extends JPanel {
public JPanel panel = new JPanel() {
public void paintComponent (Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawLine(120, 234, 23, 43);
}
};
}
至
public class TestGraphics extends JPanel {
public void paintComponent (Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawLine(120, 234, 23, 43);
}
}
由於TestGraphics
已經擴展了JPanel
,您可以將p
實例直接添加到JFrame
並直接覆蓋paintComponent()
而不是創建匿名JPanel
class。
來自評論:
最終我將為線條、矩形、三角形等創建構造函數。我想給paintcomponent一些x和y值來繪制所述線條、矩形和三角形
更具體地說,您應該創建代表這些幾何對象中的每一個的類。 每個 class 都應該有一個void paint(Graphics g)
方法。 實際上,您應該考慮使用可以從面板的paintComponent(). Your
調用的此方法創建接口或抽象class GeometricObject
。 paintComponent(). Your
GraphicsTest class can keep a
List 並on each of them from its
and call
paint(g)。
這里有很多東西要學習:抽象類、接口、列表和循環,僅舉幾例。 祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.