java虚线_Java中菜单的实现以及画实线与画虚线之间的自由转化

本文介绍了如何在Java中利用Graphics类实现画线操作,包括画实线与画虚线,并展示了如何通过菜单进行模式切换。通过自定义组件MyPanel,实现了根据用户选择的模式(点或线)动态改变画布上的图形。同时,文章还给出了Java菜单的创建方法,通过JMenuItem监听事件实现画线模式的切换。
摘要由CSDN通过智能技术生成

1、Java画线

1 import java.awt.Color;

import java.awt.Container;

import java.awt.Graphics;

import java.awt.Point;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

class MyPanel extends JPanel {

public static final int MODE_LINE = 1;

public static final int MODE_POINT = 2;

//

private int drawMode = MODE_POINT;

@Override

protected void paintComponent(Graphics g) {

// super.paintComponent(g);

// g.setColor(Color.red);

// g.fillOval(10, 10, 100, 80);

drawSinAdapteSize(g);

g.dispose();

}

// 自适应的绘图方法

private void drawSinAdapteSize(Graphics g) {

g.setColor(Color.red);

int w = getWidth();

int h = getHeight();

int SCALE_X = (int) (w / (2 * Math.PI));

int SCALE_Y = h / 2 - 2;

int OFFSET = h / 2;

Point start = new Point(0, OFFSET);

for (int x = 1; x <= SCALE_X * 2 * Math.PI; x++) {

int y = OFFSET - (int) (SCALE_Y * Math.sin(x * 1.0 / SCALE_X));

// 根据属性,决定画线还是画点

if (drawMode == MODE_POINT) {

g.fillOval(x - 1, y - 1, 2, 2);

} else if (drawMode == MODE_LINE) {

g.drawLine(start.x, start.y, x, y);

start.x = x;

start.y = y;

}

}

}

public void setDrawMode(int mode) {

this.drawMode = mode;

}

// 绘制制定大小的曲线

private void drawSin(Graphics g) {

g.setColor(Color.red);

// y = 220 - 200 * sin(x/100)

for (int x = 0; x <= 100 * 2 * Math.PI; x++) {

int y = 220 - (int) (200 * Math.sin(x / 100.0));

g.fillOval(x - 1, y - 1, 2, 2);

}

}

}

public class DrawFrame extends JFrame implements ActionListener {

// 属性

MyPanel panel = null;

// 方法

public DrawFrame() {

this.setTitle("绘图");

setSize(650, 500);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setLocationRelativeTo(null);

panel = new MyPanel();

panel.setBackground(Color.LIGHT_GRAY);

Container cp = getContentPane();

cp.add(panel);

// JMenuBar

JMenuBar menuBar = new JMenuBar();

// JMenu

JMenu menu = new JMenu("Draw");

// JMenuItem

JMenuItem item = new JMenuItem("Line");

menu.add(item);

item.addActionListener(this);

item = new JMenuItem("Point");

menu.add(item);

item.addActionListener(this);

menuBar.add(menu);

this.setJMenuBar(menuBar);

}

public static void main(String[] args) {

JFrame frame = new DrawFrame();

frame.setVisible(true);

}

@Override

public void actionPerformed(ActionEvent event) {

String cmd = event.getActionCommand();

if ("Line".equals(cmd)) {

panel.setDrawMode(MyPanel.MODE_LINE);

} else if ("Point".equals(cmd)) {

panel.setDrawMode(MyPanel.MODE_POINT);

}

panel.repaint();

}

}

2、Java菜单:

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

public class MenuFrame extends JFrame implements ActionListener {

/**

* JMuneBar(菜单栏)中包含多项Jmenu(菜单),Jmenu下有多项JMenuItem(菜单项)

*/

public MenuFrame() {

this.setTitle("MenuFrame");

this.setSize(600, 400);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

/**

* 由于失误,将所有的组件都用awt下的Menu,MenuItem,MenuBar来实现了,导致菜单中的汉字为乱码

*/

JMenuBar menuBar=new JMenuBar();

JMenu menu=new JMenu("File");

JMenuItem menuItem=new JMenuItem("新建");

JMenuItem exit=new JMenuItem("退出");

exit.addActionListener(this);

JMenuItem about=new JMenuItem("关于...");

about.addActionListener(this);

menu.add(menuItem);

menu.add(exit);

menu.add(about);

menuBar.add(menu);

menuBar.add(new JMenu("Edit"));

this.setJMenuBar(menuBar);//注意最后要将菜单栏加到MenuFrame组件中去,不然菜单不可见

}

public static void main(String[] args) {

JFrame frame=new MenuFrame();

frame.setVisible(true);

}

@Override

public void actionPerformed(ActionEvent e) {

String cmd=e.getActionCommand();

if(cmd.equals("Exit")) {

dispose();

}else if(cmd.equals("About")) {

JOptionPane.showMessageDialog(null, "菜单演示系统");

}

}

}

java中使用阻塞队列实现生产这与消费这之间的关系

需求如下: 有一个生产者和一个消费者,生产者不断的生产产品,消费这不断的消费产品.产品总数为N. 1.生产顺序按队列的方式,先进先出. 2.生产者和消费这可以同时进行. 3.当生产者生产了N个产品后不 ...

Java中long(Long)与int(Integer)之间的转换(转)

一.将long型转化为int型,这里的long型是基础类型: long a = 10; int b = (int)a; 二.将Long型转换为int型,这里的Long型是包装类型: Long a = ...

Java中int与Integer

一般小写字母开头的是数据类型(如int double),大写字母开头的一般是封装为类(如Double),里面有很多方法,比如实行转换Integer.parseInt(arg0),可以把其他类型的数据转 ...

Java中 int和Integer的区别&plus;包装类

--今天用Integer 和Integer 比较 发现有问题,于是去查了查. 1.Java 中的数据类型分为基本数据类型和引用数据类型 int是基本数据类型,Integer是引用数据类型: Inget ...

Java 中的 int 与 Integer 用于 List&amp&semi;lt&semi;Integer&amp&semi;gt&semi; 时,以及通过打印变量检測程序执行和函数调用次数计数

总结一下近期做的东西中遇到的问题 1. Java 中的 int 与 Integer 用于 List  时 两者之间的关系都是非常清楚的.int 是基本数据类型,存储的是值 ...

【Java基础】Java中的语法糖

目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...

关于android开发添加菜单XML文件之后无法在R&period;java中生成ID的问题

因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

用JAVA中BufferedImage画出漂亮的验证码点击变化

如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:

Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)

(一)Eclipse中的快捷键:  ctrl+shift+f自动整理选择的java代码 alt+/ 生成无参构造器或者提升信息 alt+shift+s+o 生成带参构造 ctrl+shift+o快速导 ...

随机推荐

配置文件类 Properties

Properties(配置文件类): 主要用于生产配置文件与读取配置文件的信息. Properties属于集合类,继承于Hashtable. Properties要注意的细节:    1. 如果配置文 ...

QT windows msvc下使用boost库(备忘)

win32-msvc2015: { contains(QMAKE_HOST.arch, x86):{ INCLUDEPATH += D:\3SDK\boost_1_61_0 LIBS += -LD:\ ...

c&num; 数据库更新操作-文本更新和数值更新小差别

1.文本更新 string strName; sql = "update 模式表 a SET 模式名称 ='"+ strName +"'where a.模式ID =&qu ...

SQL Server GUID 数据迁移至MongoDB后怎样查看?

关键字:SQL Server NEWID():BSON:MongoDB UUID 1.遇到的问题和困惑 SQL Server中的NEWID数据存储到MongoDB中会是什么样子呢?发现不能简单的通过此 ...

LeetCode算法题-Binary Tree Tilt(Java实现)

这是悦乐书的第263次更新,第276篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第130题(顺位题号是563).给定二叉树,返回整棵树的倾斜度.树节点的倾斜被定义为所有 ...

关于java类加载机制的一些理解

关于java的类加载机制加载顺序,这个东西可以说是基础的东西,不过很遗憾这方面很多人也都不是很在意,比如我自己,最近上班闲下来了,就开始看一些博客文章了,今天恰好被一篇博文给吸引了,并且他的示例题一开 ...

mysql 修改表字段长度

方案一: change ALTER TABLE t1 CHANGE a a VARCHAR(); change 可以用来更改字段名称和类型 ALTER TABLE table_name CHANGE ...

【tmos】spring data jpa 创建方法名进行简单查询

参考链接 spring data jpa 创建方法名进行简单查询:http://www.cnblogs.com/toSeeMyDream/p/6170790.html

springboot &plus; &commat;KafkaListener 手动提交及消费能力优化

转载 https://blog.csdn.net/asd5629626/article/details/82776450  https://blog.csdn.net/asd5629626/artic ...

Keil5 如何安装STM32 芯片包

http://www.keil.com/dd2/Pack/  从该网址下载 相应芯片的PACK 包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值