Java画图

Writeaprogramthatfillsthewindowwithalargeellipse,withablackoutlineandfilledwithyourfa... Write a programthat fills the window with a large ellipse, with a black outline and filledwith your favourite colour. The ellipse should touch the window boundaries,even if the window is resized.
编写一个程序,一个大椭圆包括黑色轮廓和用你最喜欢的颜色填充。即使调整窗口的大小椭圆应该接触窗口边界
Hint: themethods getWidth() and getHeight() of the Frame class can be used to get thecurrent width and height of the frame.

Provide 2 classes:
· EllipseComponent
o ExtendsJComponent andoverrides the paintComponent(Graphics g) method
· EllipseViewer.
o Makes a new EllipseComponent and adds it to a JFrame.
展开
 我来答
jamxval
推荐于2017-09-21 · TA获得超过6823个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1439万
展开全部

看来你从未动过手解决未知问题,只会做练习?

这里已经提示了怎么做,你只需要先了解基本的  Swing 中的 JLabel/JFrame 怎么用,然后自己自己做一个 EllipseComponent 覆盖它的 paintComponent(Graphics g) 方法,使用一个像 Eclipse 这样的开发工具 IDE,在 g 后面打个点就有提示这个 Graphics 有什么方法可用,里面就有2D绘图的方法。


import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class EllipseViewer extends JFrame {

private static final long serialVersionUID = 5929654695935454925L;

public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager
.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
public void run() {
EllipseViewer app = new EllipseViewer();
}
});
}

private JPanel panel;

public EllipseViewer() {
add(getPanel());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
System.out.println("Window Resized: Frame");
}
});
}

public JPanel getPanel() {
if (panel == null) {
panel = new EllipseComponent();
panel.setPreferredSize(new Dimension(300, 200));
panel.setBackground(Color.RED);
}
return panel;
}

class EllipseComponent extends JPanel {

private static final long serialVersionUID = -1744557274793554529L;

protected void paintComponent(Graphics g) {
System.out.println("Paint component");
Rectangle clientArea = this.getBounds();

int height = clientArea.height - 1;
int width = clientArea.width - 1;

// set foreground color
g.setColor(Color.BLACK);

// draw cycle/ellipse
g.drawOval(0, 0, width, height);

// set foreground color
g.setColor(Color.ORANGE);

// fill it, we give 1 pixel as line width.
g.fillOval(1, 1, width - 2, height - 2);
}

}
}
更多追问追答
追问
很多语句都没见过,能不能给简单点的,刚学这个。
追答

这里面没几个东西啊。

  • main 函数是测试用的,简单吧。

  • EllipseViewer() 构造函数,是这个 EllipseViewer 类的主体。

  • class EllipseComponent extends JPanel 这是个内部类,你也可以把它拿到外部成为一个独立的 public class 文件。

  • getPanel() 方法是创建一个 EllipseComponent 对象实例。

  • 代码中关键的 paintComponent 已经给了说明,先得到当前这个 component 的矩形区域和高和宽,然后分2步,第一步,先设置前景色为黑色并画封闭弧线并填充黑色;第二步,设置前景色为橙色并填充橙色到,不过这次填充的区域的高宽比前一次各减少了1,这样,就留下了1个像素的黑色外框。

  • serialVersionUID 可以忽略,完全不相关的,是自动生成的一部分。

最主要的绘图部分添加了注释。

protected void paintComponent(Graphics g) {
System.out.println("Paint component");

//得到当前组件可见矩形区域
Rectangle clientArea = this.getBounds();

int height = clientArea.height - 1;
int width = clientArea.width - 1;

// 设置前景色为黑色
g.setColor(Color.BLACK);

// 画闭合弧线,当宽和高相等时是一个圆,不相等时是个椭圆
g.drawOval(0, 0, width, height);

// 再改前景色为橙色
g.setColor(Color.ORANGE);

// 填充区域并留出1个像素的黑色外框
g.fillOval(1, 1, width - 2, height - 2);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式