我刚开始学习Java,现在最近在控制台之外学习新东西。我复制了教授董事会的代码,但似乎无法让它发挥作用。现在假设绘制圆形和矩形,但是当我尝试绘制时,我只是得到一个空白窗口。我想我可能错过了一行代码或其他东西。我在Mac上使用Eclipse。
我知道可能有很多方法可以做到这一点,但我希望能够保持代码的确切方式,以及你认为可以使其工作的任何修复。非常感谢。
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class Bunny {
public static void main(String [] args)
{
MyFrame f = new MyFrame();
f.setSize(500,400);
f.setVisible(true);
f.setLocation(50,100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class MyFrame extends JFrame
{
public MyFrame()
{
}
}
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class MyPanel extends JPanel
{
public void paintComponent(Graphics g)
{Graphics2D g2 = (Graphics2D) g;
Ellipse2D.Double Circle = new Ellipse2D.Double(100,50,75,75);
g2.setColor(Color.RED);
g2.fill(Circle);
Rectangle box = new Rectangle(200,100,150,150);
g2.setColor(Color.RED);
g2.fill(box);
Color myColor = new Color(255,0,0);
}
}
答案 0 :(得分:3)
我非常想告诉你的教授,他们需要回到学校学习如何正确使用Swing
您应首先查看Painting in AWT and Swing和Performing Custom Painting,了解有关绘画如何在Swing中工作的详细信息
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
Ellipse2D.Double Circle = new Ellipse2D.Double(100, 50, 75, 75);
g2.setColor(Color.RED);
g2.fill(Circle);
Rectangle box = new Rectangle(200, 100, 150, 150);
g2.setColor(Color.RED);
g2.fill(box);
g2.dispose();
}
}
}
public class Bunny {
public static void main(String[] args) {
MyFrame f = new MyFrame();
f.setSize(500, 400);
f.setVisible(true);
f.setLocation(50, 100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
错误:从事件调度线程的上下文外部与UI交互。有关详细信息,请参阅Initial Threads
public class MyFrame extends JFrame {
public MyFrame() {
}
}
错误:从顶级容器延伸(如JFrame
)通常是不鼓励的,您不会在课程中添加任何新功能,这是大多数问题发生的区域之一。你可能想对“继承的构成”进行一些研究。
您实际上也没有向框架添加任何内容,因此它将显示为空白。
public class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Ellipse2D.Double Circle = new Ellipse2D.Double(100, 50, 75, 75);
g2.setColor(Color.RED);
g2.fill(Circle);
Rectangle box = new Rectangle(200, 100, 150, 150);
g2.setColor(Color.RED);
g2.fill(box);
Color myColor = new Color(255, 0, 0);
}
}
错误:paintComponent
永远不应该是public
,没有理由任何其他类应该调用此方法。不调用super.paintComponent
将导致图形故障和问题无法结束,您应该首先调用super.paintComponent
。只有当你知道自己在做什么并且你有一个非常好的理由不...时,这种情况只有<1%。