Skip navigation

Monthly Archives: Maret 2010


*postingan sebelum tidur*

Ada salah satu cara mudah yang sudah disediakan di Java untuk melakukan parsing format tanggal. Cara itu adalah dengan menggunakan SimpleDateFormat. Misalkan kita mempunyai sebuah String berisi “23-01-2010”. Cara paling naif adalah dengan melakukan splitting pada karakter “-“. Ini akan merepotkan kalau kita mempunyai banyak string yang ingin diparsing. Daripada kita membuat sebuah rutin untuk parsing, akan lebih menyenangkan menggunakan method parse yang disediakan oleh SimpleDateFormat.

Contoh kodenya

//Parse
SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy");
String dateStr = "23-01-2010";
Date date = sdf.parse(dateStr);
//Test
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
System.out.printf("%d, %d-%d-%d\n", gc.get(Calendar.DAY_OF_WEEK),
    gc.get(Calendar.DAY_OF_MONTH),
    gc.get(Calendar.MONTH),
    gc.get(Calendar.YEAR));
Iklan

Masih agak-agak terkait dengan 2 post sebelumnya, hasil perhitungan histogram dari sebuah gambar akan ditampilkan dengan menggunakan grafik. Untuk itu dibutuhkan sebuah pustaka grafik. Pustaka yang paling sering saya pakai adalah JFreeChart. Pustaka ini gratis dan sangat lengkap hanya saja untuk mendapatkan dokumentasi dan contoh-contoh penggunaannya yang lengkap kita harus membeli panduannya.

Cara mudah untuk membuat grafik adalah dengan menggunakan ChartFactory pada JFreeChart. Dari factory tersebut kita bebas memilih jenis grafik yang kita inginkan, dalam hal ini CategoryPlot di mana kita ingin menampilkan setiap warna dalam kategori yang berbeda. Untuk mengisi datanya kita hanya memasukkan data ke DataSet yang sesuai (untuk CategoryPlot menggunakan DefaultCategoryDataset atau extend dari CategoryDataset).

Contoh kodenya (digabung dengan penghitungan histogram)

imageColorCount = new int[3][0x100];
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                int color = image.getRGB(x, y);
                int cred = (color & 0x00ff0000) >> 16;
                int cgreen = (color & 0x0000ff00) >> 8;
                int cblue = color & 0x000000ff;
                imageColorCount[RED][cred]++;
                imageColorCount[GREEN][cgreen]++;
                imageColorCount[BLUE][cblue]++;
            }
        }
        //
        DefaultCategoryDataset colorDataset = new DefaultCategoryDataset();
        for (int j = 0; j < 0x100; j++) {
            colorDataset.addValue(imageColorCount[0][j], "Red", new Integer(j));
            colorDataset.addValue(imageColorCount[2][j], "Blue", new Integer(j));
            colorDataset.addValue(imageColorCount[1][j], "Green", new Integer(j));
        }
        JFreeChart jfcolor = ChartFactory.createLineChart("Histogram", "Nilai", "Frekuensi", colorDataset, PlotOrientation.VERTICAL, true, true, true);
        chartRGBPanel.removeAll();
        ChartPanel jpchart = new ChartPanel(jfcolor);
        chartRGBPanel.add(jpchart);
        chartRGBPanel.repaint();

Voila. Di bawah adalah salah satu contoh aplikasi dari kode-kode yang sudah dimodifikasi.


Melanjutkan tulisan sebelumnya, kali ini judulnya khusus untuk menampilkan gambar di Swing. Setelah mencari beberapa kode akhirnya dapat caranya dengan mengextend JPanel.

public class ImagePanel extends JPanel {

    BufferedImage image;
    Dimension size = new Dimension();

    public ImagePanel() {
    }

    public void setImage(BufferedImage bimage) {
        image = bimage;
        size.setSize(image.getWidth(), image.getHeight());
    }

    public BufferedImage getImage() {
        return image;
    }

    @Override
    protected void paintComponent(Graphics g) {
        // Center image in this component.
        int x = (getWidth() - size.width) / 2;
        int y = (getHeight() - size.height) / 2;
        g.drawImage(image, x, y, this);
    }

    /**
     * This method handles the communication of
     * size requirements with the parent JScrollPane.
     */
    @Override
    public Dimension getPreferredSize() {
        return size;
    }
}

Untuk menggunakannya hanya dengan mengeset nilai BufferedImage dengan hasil pembacaan yang sudah saya tulis sebelumnya.

%d blogger menyukai ini: