所以我是新的Java图形,我正在创建一个程序,将显示一个矩形。但当我运行我的程序时,它只显示为一个小盒子,而不是矩形。我真的不知道为什么会这样。
下面是我的代码:
import javax.swing.*;
public class GraphicsEditor{
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
Rectangle rectangle = new Rectangle();
frame.setSize(1280, 720);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(panel);
panel.add(rectangle);
}
}
这是我的矩形类:
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
public class Rectangle extends JPanel implements Shape {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
g2D.fillRect(0, 0, 200, 130);
}
}
这是我的形状界面:
import java.awt.*;
public interface Shape {
void paintComponent(Graphics g);
}
如注释所述,您应该将面板
和矩形
的首选大小设置为所需大小,然后打包框架,如下所示:
panel.setPreferredSize(new Dimension(500,500));
rectangle.setPreferredSize(new Dimension(500,500));
frame.pack();
否则,您的LayoutManager(如果未指定,它默认为flowLayout
)将按照它想要的方式处理您的矩形。因此,另一种方法是学习布局管理器,并使用您想要的布局管理器。
作为附带说明,我想对您的代码提出一些建议。请记住,Swing不是线程安全的,因此将代码放在invokelater()
调用中,例如:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
Rectangle rectangle = new Rectangle();
frame.setSize(1280, 720);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setPreferredSize(new Dimension(500,500));
rectangle.setPreferredSize(new Dimension(500,500));
frame.add(panel);
panel.add(rectangle);
frame.pack();
frame.setVisible(true);
}
});
此外,应该在添加组件之后调用frame.setVisible(true)
。
来,试试这个
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class GraphicsEditor {
public static void main(String[] args) {
JFrame frame = new JFrame();
Rectangle rectangle = new Rectangle();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(rectangle);
frame.pack();
// center frame on screen
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class Rectangle extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
g2D.fillRect(0, 0, 200, 130);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
}
几件事。
getPreferredSize()
。问题内容: 我正在尝试使Java 2D图形“ hello world”运行起来,并发现它异常困难(即,我正在搜索“ java hello world example”的变体,然后变成空白)。有人能帮我举一个最小的世界范例吗? 编辑 不过,这是一个不错的起点,“ Java教程:执行自定义绘画” 。 问题答案: 要在Swing中绘制矩形,您应该: 首先,永远不要直接在JFrame或其他顶级窗口中绘制。
在上一章中,我们已经看到了JavaFX的基本应用,我们学习了如何创建一个空窗口以及如何在JavaFX的XY平面上绘制一条线。 除了线,我们还可以绘制其他几个2D形状。 2D形状 通常,2D形状是可以在XY平面上绘制的几何图形,包括直线,矩形,圆形等。 使用JavaFX库,您可以绘制 - 预定义的形状,如直线,矩形,圆,椭圆,多边形,折线,立方曲线,四边形曲线,圆弧。 路径元素,如MoveTO路径元
主要内容:JOGL 正方形示例,JOGL 三角形示例在上一节中,我们已经学习了如何在 JOGL 中绘制基本线条。使用相同的方法,我们还可以绘制各种类型的形状,例如正方形、矩形、三角形等。 JOGL 正方形示例 在这个例子中,我们将绘制四个不同的边,使它们都连接在一个正方形的点上。 输出结果如下: JOGL 三角形示例 在这个例子中,我们将绘制三个不同的边,它们都连接在一个三角形形状的点上。 输出结果如下: 因此,任何类型的图形都可以通过连接特定形状
问题内容: 下学期,我们有一个团队中的Java应用程序模块。该模块的要求是制作游戏。在圣诞节假期里,我一直在做一些练习,但是我想不出绘制图形的最佳方法。 我正在使用Java Graphics2D对象在屏幕上绘制形状,并每秒调用30次,但这非常闪烁。有没有更好的方法来绘制Java中的高性能2D图形? 问题答案: 您想要做的是创建一个带有BufferStrategy的canvas组件并对其进行渲染,下
虽然我明白绘制函数的目的是绘制到某个表面,但我不明白为什么它不简单地返回pyplay。表面对象,您可以稍后在需要时将其烧毁到表面。到目前为止,当我只想创建一个表面并稍后将其绘制到其他地方时,这非常不方便。 有没有什么方法可以让类似的函数返回曲面对象,而不是执行额外的步骤并直接绘制到另一个曲面?