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快速导 ...
随机推荐
- Idea 调试快捷键
F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over ...
- The word 'localhost' is not correctly spelled 这个问题怎么解决
The word 'localhost' is not correctly spelled 这个问题怎么解决 有时工程中有下划线并提示 The word is not correctly spelle ...
- Android开发实战一 百度SDK
一 申请百度API key 百度地图API:http://developer.baidu.com/map/ 百度地图开发者平台地址:http://developer.baidu.com/map/ .点 ...
- linux下安装mysql-5.6.41
1.下载安装包,下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads .选择完版本,然后点击下方 No thanks, just ...
- (不断更新)关于显著性检测的调研-Salient Object Detection: A Survey
<Salient Object Detection: A Survey>作者:Ali Borji.Ming-Ming Cheng.Huaizu Jiang and Jia Li 基本按照文 ...
- 【python】统一转换日期格式dateutil.parser.parse
背景: 我有很多很多的日志数据,每个日志里面都有日期字符串,我需要将其转换为datetime格式. 问题是,这些日志里的字符串格式五花八门,有2017-05-25T05:27:30.313292255 ...
- laravel Blade 模板引擎
与视图文件紧密关联的就是模板代码,我们在视图文件中通过模板代码和 HTML 代码结合实现视图的渲染.和很多其他后端语言不同,PHP 本身就可以当做模板语言来使用,但是这种方式有很多缺点,比如安全上的隐 ...
- 优先选择nullptr而不是0和NULL
我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针 ...
- Java接口自动化测试之TestNG学习(二)
在maven项目的pom.xml文件中导入TestNG <?xml version="1.0" encoding="UTF-8"?> <pro ...
- sqoop无法导出parquet文件到mysql
1.问题描述 在CDH集群中我们需要将Hive表的数据导入到RDBMS数据库中,使用Sqoop工具可以方便的将Hive表数据抽取到RDBMS数据库中,在使用Sqoop抽取Hive Parquet表时作 ...