Java中菜单的实现以及画实线与画虚线之间的自由转化
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中菜单的实现以及画实线与画虚线之间的自由转化的更多相关文章
- 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的区别+包装类
--今天用Integer 和Integer 比较 发现有问题,于是去查了查. 1.Java 中的数据类型分为基本数据类型和引用数据类型 int是基本数据类型,Integer是引用数据类型: Inget ...
- Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检測程序执行和函数调用次数计数
总结一下近期做的东西中遇到的问题 1. Java 中的 int 与 Integer 用于 List<Integer> 时 两者之间的关系都是非常清楚的.int 是基本数据类型,存储的是值 ...
- 【Java基础】Java中的语法糖
目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题
因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...
- 用JAVA中BufferedImage画出漂亮的验证码点击变化
如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...
- Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)
(一)Eclipse中的快捷键: ctrl+shift+f自动整理选择的java代码 alt+/ 生成无参构造器或者提升信息 alt+shift+s+o 生成带参构造 ctrl+shift+o快速导 ...
随机推荐
- springboot第一个项目【创建】
1.new project,不勾选create from archetype,直接选择 2.next下一步 在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个属性构成的,分别是groupId ...
- 使用JUnit进行类的测试(一)
首先是测试的一些常用标注: @Test:执行测试的方法 @Before & @After : 在 测试的方法 “前” 或者 “后” 被唤醒 -Initialization -Release r ...
- 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!
作者:编辑部的故事 < 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐! > 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐! Tutoria ...
- Confluence 6 用自带的用户管理
在一些特定的情况下,你可能希望禁用 Confluence 自带的用户管理或完全使用外部的用户目录进行用户管理.例如 Jira 软件或者 Jira Service Desk.你可以在 Confluenc ...
- MySQL外键使用详解
一.基本概念 1.MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种.不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引.用于外键关系的字段必须 ...
- Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)
Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数
- linux下安装mysql-5.6.41
1.下载安装包,下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads .选择完版本,然后点击下方 No thanks, just ...
- (批量更新)对多个符合条件的id做更新操作
需求描述:把checkbox勾选的对应id的记录的标志位置1或0,这个其实不难的,不过我自己做的话,肯定是多次访问数据库做更新,看了老大的代码,发现差距不是一般的大,老大把sql灵活运用,结果一次访问 ...
- 《剑指offer》 包含min函数的栈
本题来自<剑指offer> 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体 ...
- hdu1811 拓扑排序+并查集缩点
/*给定两个点之间的三种关系 = < >如果是=就将两点放到同一个集合里进行缩点 离线处理所有关系,先用并查集将等于关系缩成一个点 */ #include<bits/stdc++.h ...