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中菜单的实现以及画实线与画虚线之间的自由转化的更多相关文章

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

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

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

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

  3. Java中int与Integer

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

  4. Java中 int和Integer的区别+包装类

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

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

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

  6. 【Java基础】Java中的语法糖

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

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

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

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

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

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

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

随机推荐

  1. Idea 调试快捷键

    F9            resume programe 恢复程序 Alt+F10       show execution point 显示执行断点 F8            Step Over ...

  2. The word 'localhost' is not correctly spelled 这个问题怎么解决

    The word 'localhost' is not correctly spelled 这个问题怎么解决 有时工程中有下划线并提示 The word is not correctly spelle ...

  3. Android开发实战一 百度SDK

    一 申请百度API key 百度地图API:http://developer.baidu.com/map/ 百度地图开发者平台地址:http://developer.baidu.com/map/ .点 ...

  4. linux下安装mysql-5.6.41

    1.下载安装包,下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads .选择完版本,然后点击下方 No thanks, just ...

  5. (不断更新)关于显著性检测的调研-Salient Object Detection: A Survey

    <Salient Object Detection: A Survey>作者:Ali Borji.Ming-Ming Cheng.Huaizu Jiang and Jia Li 基本按照文 ...

  6. 【python】统一转换日期格式dateutil.parser.parse

    背景: 我有很多很多的日志数据,每个日志里面都有日期字符串,我需要将其转换为datetime格式. 问题是,这些日志里的字符串格式五花八门,有2017-05-25T05:27:30.313292255 ...

  7. laravel Blade 模板引擎

    与视图文件紧密关联的就是模板代码,我们在视图文件中通过模板代码和 HTML 代码结合实现视图的渲染.和很多其他后端语言不同,PHP 本身就可以当做模板语言来使用,但是这种方式有很多缺点,比如安全上的隐 ...

  8. 优先选择nullptr而不是0和NULL

    我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针 ...

  9. Java接口自动化测试之TestNG学习(二)

    在maven项目的pom.xml文件中导入TestNG <?xml version="1.0" encoding="UTF-8"?> <pro ...

  10. sqoop无法导出parquet文件到mysql

    1.问题描述 在CDH集群中我们需要将Hive表的数据导入到RDBMS数据库中,使用Sqoop工具可以方便的将Hive表数据抽取到RDBMS数据库中,在使用Sqoop抽取Hive Parquet表时作 ...