MyFrame.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyFrame extends JFrame implements ActionListener {
private MyPanel drawingPanel;
private MyFrame() {
int width = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2.0);
int height = (int) (width / 16.0 * 9.0);
setSize(width, height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
//For better looks.
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
drawingPanel = new MyPanel();
drawingPanel.setPolygon(5);
Container contentPane = this.getContentPane();
contentPane.add(drawingPanel, BorderLayout.CENTER);
JPanel columnOfButtons = new JPanel(new GridLayout(8, 1));
ButtonGroup buttonGroup = new ButtonGroup();
for (int i = 3; i < 10; i++) {
makeRadioButton(columnOfButtons, String.valueOf(i), buttonGroup, this);
}
JButton exit = new JButton("Exit");
exit.addActionListener(this);
columnOfButtons.add(exit);
contentPane.add(columnOfButtons, BorderLayout.EAST);
setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(MyFrame::new);
}
private void makeRadioButton(JPanel p, String name, ButtonGroup group, ActionListener target) {
JRadioButton b = new JRadioButton(name);
group.add(b);
// add it to the specified JPanel and make the JPanel listen
p.add(b);
b.addActionListener(target);
}
public void actionPerformed(ActionEvent e) {
// Do the appropriate thing depending on which button is pressed.
// Use the getActionCommand() method to identify the button.
switch (e.getActionCommand()) {
case "Exit":
System.exit(0);
case "3":
drawingPanel.setPolygon(3);
break;
case "4":
drawingPanel.setPolygon(4);
break;
case "5":
drawingPanel.setPolygon(5);
break;
case "6":
drawingPanel.setPolygon(6);
break;
case "7":
drawingPanel.setPolygon(7);
break;
case "8":
drawingPanel.setPolygon(8);
break;
case "9":
drawingPanel.setPolygon(9);
break;
}
}
}
MyPanel.java
/*
* Developed by Neo on 26/11/18 15:37.
* Last modified 17/11/17 14:21.
* Copyright (c) 2018. All rights reserved.
*/
import javax.swing.*;
import java.awt.*;
public class MyPanel extends JPanel {
private int sides = 0;
void setPolygon(int sides) {
this.sides = sides;
this.repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
// Make text and shapes appear smoother
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (sides == 0) sides = 5;
int[] x = new int[sides];
int[] y = new int[sides];
int width = getWidth();
int height = getHeight();
int r = (width > height ? height : width) / 3;
for (int i = 0; i < sides; i++) {
x[i] = (int) (width / 2 + r * Math.cos(2 * Math.PI / sides * i));
y[i] = (int) (height / 2 + r * Math.sin(2 * Math.PI / sides * i));
}
Shape shape = new Polygon(x, y, sides);
g2.draw(shape);
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机科学概论(第11版)
J. Glenn Brookshear / 刘艺、肖成海、马小会、毛倩倩 / 人民邮电出版社 / 2011-10-1 / 69.00元
本书多年来一直深受世界各国高校师生的欢迎,是美国哈佛大学、麻省理工学院、普林斯顿大学、加州大学伯克利分校等许多著名大学的首选教材,对我国的高校教学也产生了广泛影响。 本 书以历史眼光,从发展的角度、当前的水平以及现阶段的研究方向等几个方面,全景式描绘了计算机科学各个子学科的主要领域。在内容编排上,本书很好地兼顾了 学科广度和主题深度,把握了最新的技术趋势。本书用算法、数据抽象等核心思想贯穿各......一起来看看 《计算机科学概论(第11版)》 这本书的介绍吧!