march alex's blog
          hello,I am march alex
          posts - 52,comments - 7,trackbacks - 0
          這個應用主要是為了生成座位的安排。程序運行后,在菜單欄中選擇打開文件,然后我們假設文件的格式為:每一行一個人名。
          例:
          風清揚
          無名僧
          東方不敗
          任我行
          喬峰
          虛竹
          段譽
          楊過
          郭靖
          黃蓉
          周伯通
          小龍女
          這個程序的特點如下:
          在JFrame中添加了菜單欄;
          在畫布中添加了諸多元素;
          最后會將圖片通過圖片緩存保存到本地“frame.png”中。
          代碼如下:
          import java.awt.Color;
          import java.awt.FlowLayout;
          import java.awt.Graphics;
          import java.awt.Graphics2D;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;
          import java.awt.image.BufferedImage;
          import java.io.BufferedReader;
          import java.io.File;
          import java.io.FileNotFoundException;
          import java.io.FileReader;
          import java.io.IOException;

          import javax.imageio.ImageIO;
          import javax.swing.ImageIcon;
          import javax.swing.JFileChooser;
          import javax.swing.JFrame;
          import javax.swing.JLabel;
          import javax.swing.JList;
          import javax.swing.JMenu;
          import javax.swing.JMenuBar;
          import javax.swing.JMenuItem;
          import javax.swing.JPanel;


          public class FrameWork extends JFrame {
              
              private static final double pi = Math.acos(-1.0);
              private static final int Width = 1000;
              private static final int Height = 600;
              private static JFrame frame = null;
              
              private static int personNumber = 15;
              private static String[] names = new String[100];
              
              public FrameWork() {
                  frame = new JFrame("Java菜單欄");
                  
                  //JList list = new JList();
                  
          //frame.add(list);
                  
                  JMenuBar menuBar = new JMenuBar();
                  frame.setJMenuBar(menuBar);
                  
                  JMenu fileMenu = new JMenu("文件");
                  JMenu openMenu = new JMenu("打開");
                  JMenuItem openItem = new JMenuItem("文件");
                  openMenu.add(openItem);
                  openItem.addActionListener(new MyAction());
                  fileMenu.add(openMenu);
                  menuBar.add(fileMenu);
                  
                  frame.setLocationRelativeTo(null);
                  frame.setSize(Width, Height);
                  frame.setLocation(100, 100);
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  
                  //JPanel panel = new ImagePanel();
                  
          //panel.setBounds(0, 0, Width, Height);
                  
          //frame.getContentPane().add(panel);
                  
                  frame.setVisible(true);
              }
              
              private static int getNumber1(int i) {
                  int n = personNumber;
                  if((n-1)/2*2-2*i >= 0) return (n-1)/2*2 - 2*i;
                  return (i-(n-1)/2)*2-1;
              }
              
              private static int getNumber2(int i) {
                  if(i*2+1 <= personNumber) return i*2;
                  return 2*(personNumber-i)-1;
              }
              
              private class MyAction implements ActionListener {
                  public void actionPerformed(ActionEvent evt) {
                      //Object s = evt.getSource();
                      JFileChooser jfc=new JFileChooser();
                      jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
                      jfc.showDialog(new JLabel(), "選擇");
                      File file=jfc.getSelectedFile();
                      /*if(file.isDirectory()){
                          System.out.println("文件夾:"+file.getAbsolutePath());
                      }else if(file.isFile()){
                          System.out.println("文件:"+file.getAbsolutePath());
                      }
          */
                      personNumber = 0;
                      BufferedReader reader;
                      try {
                          reader = new BufferedReader(new FileReader(file.getAbsolutePath()));
                          while((names[personNumber]=reader.readLine()) != null) {
                              personNumber ++;
                          }
                          reader.close();
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
                      JPanel panel = new ImagePanel();
                      panel.setBounds(0, 0, Width, Height);
                      frame.getContentPane().add(panel);
                      frame.setVisible(true);
                      //System.out.println(personNumber);
                      
          //for(int i=0;i<personNumber;i++) 
                          
          //System.out.println(names[i]);
                      BufferedImage  bi = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_ARGB);
                      Graphics2D  g2d = bi.createGraphics();
                      frame.paint(g2d);
                      try {
                          ImageIO.write(bi, "PNG", new File("D:\\frame.png"));
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
                  }
              }
              
              class ImagePanel extends JPanel {
                  public void paint(Graphics g) {
                      super.paint(g);
                      g.setColor(Color.white);
                      g.fillRect(0, 0, Width, Height);
                      g.setColor(Color.black);
                      int delx = (Width - 20) / (personNumber + 1);
                      for(int i=0;i<personNumber;i++) {
                          int x = i * delx + 10;
                          g.drawRect(x, 10, delx, 20);
                          //String s = "" + getNumber1(i);
                          int id = getNumber1(i);
                          String s = names[id];
                          g.drawString(s, x+2, 22);
                          
                          //s =  "" + getNumber2(i);
                          id = getNumber2(i);
                          s = names[id];
                          int x0 = 440, y0 = 285, r = 170;
                          int xx = (int) (x0 - r * Math.sin(pi*2*i/personNumber));
                          int yy = (int) (y0 - r * Math.cos(pi*2*i/personNumber));
                          g.drawString(s, xx, yy);
                      }
                      g.drawOval(300, 130, 300, 300);
                      
                  }
              }
              
              public static void main(String[] args) {
                  new FrameWork();
              }
          }

          posted on 2015-03-18 20:20 marchalex 閱讀(288) 評論(0)  編輯  收藏 所屬分類: java小程序
          主站蜘蛛池模板: 故城县| 柞水县| 普定县| 沾益县| 台中市| 平和县| 扬中市| 崇仁县| 调兵山市| 西丰县| 临汾市| 黄平县| 建瓯市| 永康市| 文化| 莱芜市| 武川县| 公安县| 柳林县| 安福县| 白银市| 资溪县| 白水县| 左云县| 扶风县| 娱乐| 白城市| 嘉鱼县| 云阳县| 卓尼县| 佛教| 磴口县| 汪清县| 东丽区| 临汾市| 牟定县| 中方县| 朝阳县| 新疆| 抚顺县| 铜川市|