⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 juke.java

📁 用JAVA实现录音机功能
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                g2.setFont(font24);                g2.drawString(currentName, 5, fm28.getHeight()-5);                if (duration <= 0.0) {                    loading.render(d, g2);                } else {                    double seconds = getSeconds();                    if (midiEOM || audioEOM) {                        seconds = duration;                    }                    if (seconds > 0.0) {                        g2.setFont(font42);                        String s = String.valueOf(seconds);                        s =  s.substring(0,s.indexOf('.')+2);                        int strW = (int) fm42.getStringBounds(s, g2).getWidth();                        g2.drawString(s, d.width-strW-9, fm42.getAscent());                        int num = 30;                        int progress = (int) (seconds / duration * num);                        double ww = ((double) (d.width - 10) / (double) num);                        double hh = (int) (d.height * 0.25);                        double x = 0.0;                        for ( ; x < progress; x+=1.0) {                            g2.fill(new Rectangle2D.Double(x*ww+5, d.height-hh-5, ww-1, hh));                        }                        g2.setColor(jfcDarkBlue);                        for ( ; x < num; x+=1.0) {                            g2.fill(new Rectangle2D.Double(x*ww+5, d.height-hh-5, ww-1, hh));                        }                    }                }            }        }                public void start() {            pbThread = new Thread(this);            pbThread.setName("PlaybackMonitor");            pbThread.start();        }                public void stop() {            if (pbThread != null) {                pbThread.interrupt();            }            pbThread = null;        }                public void run() {            while (pbThread != null) {                try {                    pbThread.sleep(99);                } catch (Exception e) { break; }                repaint();            }            pbThread = null;        }    } // End PlaybackMonitor                /**     * Table to display the name of the sound.     */    class JukeTable extends JPanel implements ActionListener {        TableModel dataModel;        JFrame frame;        JTextField textField;        JButton applyB;        public JukeTable() {            setLayout(new BorderLayout());            setPreferredSize(new Dimension(260,300));            final String[] names = { "#", "Name" };                dataModel = new AbstractTableModel() {                public int getColumnCount() { return names.length; }                public int getRowCount() { return sounds.size();}                public Object getValueAt(int row, int col) {                     if (col == 0) {                        return new Integer(row);                    } else if (col == 1) {                        Object object = sounds.get(row);                        if (object instanceof File) {                            return ((File) object).getName();                        } else if (object instanceof URL) {                            return ((URL) object).getFile();                        }                    }                     return null;                }                public String getColumnName(int col) {return names[col]; }                public Class getColumnClass(int c) {                    return getValueAt(0, c).getClass();                }                public boolean isCellEditable(int row, int col) {                    return false;                }                public void setValueAt(Object aValue, int row, int col) {                }            };                table = new JTable(dataModel);            TableColumn col = table.getColumn("#");            col.setMaxWidth(20);            table.sizeColumnsToFit(0);                    JScrollPane scrollPane = new JScrollPane(table);            EmptyBorder eb = new EmptyBorder(5,5,2,5);            scrollPane.setBorder(new CompoundBorder(eb,new EtchedBorder()));            add(scrollPane);            JPanel p1 = new JPanel();            JMenuBar menuBar = new JMenuBar();            menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));            JMenu menu = (JMenu) menuBar.add(new JMenu("Add"));            String items[] = { "File or Directory of Files", "URL" };            for (int i = 0; i < items.length; i++) {                JMenuItem item = menu.add(new JMenuItem(items[i]));                item.addActionListener(this);            }             p1.add(menuBar);            menuBar = new JMenuBar();            menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));            menu = (JMenu) menuBar.add(new JMenu("Remove"));            JMenuItem item = menu.add(new JMenuItem("Selected"));            item.addActionListener(this);            item = menu.add(new JMenuItem("All"));            item.addActionListener(this);            p1.add(menuBar);            loopB = addButton("loop", p1);            loopB.setBackground(Color.gray);            loopB.setSelected(true);            add("South", p1);        }                private JButton addButton(String name, JPanel p) {            JButton b = new JButton(name);            b.addActionListener(this);            p.add(b);            return b;        }         private void doFrame(String titleName) {            int w = 500;            int h = 130;            JPanel panel = new JPanel(new BorderLayout());            JPanel p1 = new JPanel();            if (titleName.endsWith("URL")) {                p1.add(new JLabel("URL :"));                textField = new JTextField("http://foo.bar.com/foo.wav");                textField.addActionListener(this);            } else {                p1.add(new JLabel("File or Dir :"));                String sep = String.valueOf(System.getProperty("file.separator").toCharArray()[0]);                String text = null;                try {                    text = System.getProperty("user.dir") + sep;                } catch (SecurityException ex) {                    reportStatus(ex.toString());                    JavaSound.showInfoDialog();                    return;                }                textField = new JTextField(text);                textField.setPreferredSize(new Dimension(w-100, 30));                textField.addActionListener(this);            }            p1.add(textField);            panel.add(p1);            JPanel p2 = new JPanel();            applyB = addButton("Apply", p2);            addButton("Cancel", p2);            panel.add("South", p2);            frame = new JFrame(titleName);            frame.getContentPane().add("Center", panel);            frame.pack();            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();            frame.setLocation(d.width/2 - w/2, d.height/2 - h/2);            frame.setSize(w, h);            frame.setVisible(true);        }        public void actionPerformed(ActionEvent e) {            Object object = e.getSource();            if (object instanceof JTextField) {                applyB.doClick();            } else if (object instanceof JMenuItem) {                JMenuItem mi = (JMenuItem) object;                if (mi.getText().startsWith("File")) {                    doFrame("Add File or Directory");                } else if (mi.getText().equals("URL")) {                    doFrame("Add URL");                } else if (mi.getText().equals("Selected")) {                    int rows[] = table.getSelectedRows();                    Vector tmp = new Vector();                    for (int i = 0; i < rows.length;i++) {                        tmp.add(sounds.get(rows[i]));                    }                    sounds.removeAll(tmp);                    tableChanged();                } else if (mi.getText().equals("All")) {                    sounds.clear();                    tableChanged();                }            } else if (object instanceof JButton) {                JButton button = (JButton) e.getSource();                if (button.getText().equals("Apply")) {                    String name = textField.getText().trim();                    if (name.startsWith("http") || name.startsWith("file")) {                        try {                            sounds.add(new URL(name));                        } catch (Exception ex) { ex.printStackTrace(); };                    } else {                        loadJuke(name);                    }                    tableChanged();                } else if (button.getText().equals("Cancel")) {                    frame.dispose();                    frame = null;                    errStr = null;                    playbackMonitor.repaint();                } else if (button.getText().equals("loop")) {                    loopB.setSelected(!loopB.isSelected());                    loopB.setBackground(loopB.isSelected() ? Color.gray : Color.lightGray);                }                startB.setEnabled(sounds.size() != 0);            }        }        public void tableChanged() {            table.tableChanged(new TableModelEvent(dataModel));        }    }  // End JukeTable    /**     * Animation thread for when an audio file loads.     */    class Loading extends Thread {        double extent; int incr;        public void run() {            extent = 360.0; incr = 10;            while (true) {                try { sleep(99); } catch (Exception ex) { break; }                playbackMonitor.repaint();            }        }        public void render(Dimension d, Graphics2D g2) {             if (isAlive()) {                FontRenderContext frc = g2.getFontRenderContext();                TextLayout tl = new TextLayout("Loading", g2.getFont(), frc);                float sw = (float) tl.getBounds().getWidth();                tl.draw(g2, d.width-sw-45, d.height-10);                double x = d.width-33, y = d.height-30, ew = 25, eh = 25;                g2.draw(new Ellipse2D.Double(x,y,ew,eh));                g2.fill(new Arc2D.Double(x,y,ew,eh,90,extent,Arc2D.PIE));                if ((extent -= incr) < 0) {                    extent = 350.0;                }            }        }    }                /**     * Animation thread for the contributors of Java Sound.     */    class Credits extends Thread {        int x;        Font font16 = new Font("serif", Font.PLAIN, 16);        String contributors = "Contributors : Kara Kytle, " +                               "Jan Borgersen, " + "Brian Lichtenwalter";        int strWidth = getFontMetrics(font16).stringWidth(contributors);        public void run() {            x = -999;             while (!playbackMonitor.isShowing()) {                try { sleep(999); } catch (Exception e) { return; }            }            for (int i = 0; i < 100; i++) {                try { sleep(99); } catch (Exception e) { return; }            }            while (true) {                if (--x < -strWidth) {                    x = playbackMonitor.getSize().width;                }                playbackMonitor.repaint();                try { sleep(99); } catch (Exception ex) { break; }            }        }        public void render(Dimension d, Graphics2D g2) {            if (isAlive()) {                g2.setFont(font16);                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,                                     RenderingHints.VALUE_ANTIALIAS_OFF);                g2.drawString(contributors, x, d.height-5);            }        }    }                public static void main(String args[]) {        String media = "./audio";        final Juke juke = new Juke(args.length == 0 ? media : args[0]);        juke.open();        JFrame f = new JFrame("Juke Box");        f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {System.exit(0);}            public void windowIconified(WindowEvent e) {                 juke.credits.interrupt();            }        });        f.getContentPane().add("Center", juke);        f.pack();        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();        int w = 750;        int h = 340;        f.setLocation(screenSize.width/2 - w/2, screenSize.height/2 - h/2);        f.setSize(w, h);        f.setVisible(true);        if (args.length > 0) {            File file = new File(args[0]);            if (file == null && !file.isDirectory()) {                System.out.println("usage: java Juke audioDirectory");            }         }    }} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -