Bekerja dengan Swing, apalagi jika berurusan dengan tampilan data, pasti pernah menggunakan Jtable
bukan? Ada relasi yang kemarin mengalami situasi, di mana data yang harus ditampilkan ternyata sangat besar, mencapai 17 ribu buah, dan katanya, itu akan terus bertambah. Continue Reading…
Category Archives: Java
Java Swing, Membaca Kode Warna Heksadesimal
Bagi Anda yang pernah bermain dengan grafik digital, misalnya Web Design, pasti pernah melihat kode warna dalam format misalnya #FFFFFF
bukan? Format tersebut adalah representasi warna dalam bilangan Heksadesimal, yang mana terdiri dari 6 digit (di CSS, dapat hanya menggunakan 3 digit) , dengan mencakup 3 Warna Dasar, yaitu Red, Green, dan Blue.
Masing masing warna tersebut direpresentasikan oleh 2 digit bilangan heksadesimal, yang berarti nilai tertinggi dari bilang tersebut adalah FF atau 255, kunjungi tautan berikut untuk proses konversinya.
Dalam post kali ini, Saya ingin memberikan contoh implementasi kode warna Heksadesimal tersebut dalam bahasa pemrograman Java, khususnya dengan menggunakan komponen Swing
. Class yang dapat digunakan adalah java.awt.Color
. Yang mana, class tersebut dapat di-construct dengan parameter integer
, yang mana dapat merupakan representasi nilai bilangan dari huruf heksadesimal.
Sedangkan untuk mengkonversi String
Heksadesimal menjadi integer
, dapat menggunakan fungsi bawaan Integer.parseInt(String, int Radix)
, dimana radix disini adalah nilai basis bilangan, dalam hal heksadesimal ini, adalah 16. Iya, heksadesimal adalah bilangan berbasis 16.
Proses konversi String Heksadesimal menjadi integer, dapat dilakukan, misalnya dengan kode berikut
1 2 3 4 5 6 7 8 9 | Static Color parseColor(String hex){ try { int hexValue = Integer.parseInt(hex, 16); return new Color(hexValue); } catch (Exception e){ e.printStackTrace(); return null; } } |
Dan berikut saya berikan contoh kode untuk diaplikasikan dalam aplikasi Java, tentu saja, kode berikut hanya mendemonstrasikan bagaimana proses konversi dan penggunaan Color
tersebut. Berbagai error handling mungkin harus diterapkan dalam aplikasi sebenarnya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | package com.kurungkurawal.spo; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * Created by konglie on 3/7/16. */ public class HexColors extends JFrame { public static void main(String[] args){ new HexColors(); } JPanel body, headerPanel, colorPanel; JTextField inputColor; JButton btnProcess; public HexColors(){ setTitle("Contoh Warna dari String Heksadesimal"); setResizable(false); setPreferredSize(new Dimension(640, 480)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); body = new JPanel(new BorderLayout()); inputColor = new JTextField("DD3333"); btnProcess = new JButton("Proses"); btnProcess.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { processInput(); } }); headerPanel = new JPanel(new BorderLayout()); headerPanel.setBorder(BorderFactory.createEmptyBorder(5,15,5,15)); headerPanel.add(new JLabel("Kode Warna Heksadesimal, 6 Digit"), BorderLayout.WEST); headerPanel.add(inputColor, BorderLayout.CENTER); headerPanel.add(btnProcess, BorderLayout.EAST); body.add(headerPanel, BorderLayout.NORTH); colorPanel = new JPanel(); colorPanel.setOpaque(true); body.add(colorPanel, BorderLayout.CENTER); getContentPane().add(body, BorderLayout.CENTER); pack(); setLocationRelativeTo(null); setVisible(true); processInput(); } void processInput(){ final Color color = parseColor(); if(color == null){ JOptionPane.showMessageDialog(null, "Gagal membaca kode warna"); } else { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { colorPanel.setBackground(color); } }); } } Color parseColor(){ try { String hex = inputColor.getText(); if(hex.startsWith("#")){ hex = hex.replaceAll("^#", ""); } int hexValue = Integer.parseInt(hex, 16); return new Color(hexValue); } catch (Exception e){ e.printStackTrace(); return null; } } } |
Demikian, semoga berguna untuk kita semua.
Format Baris Teks untuk dokumen menggunakan Java
Banyak library Java yang memberikan kemudahan untuk menciptakan dokumen dalam format Excel, PDF, dan format modern (dan canggih) lainnya. Namun bagaimana jika yang dibutuhkan hanya untuk membuat dokumen teks sederhana saja, namun membutuhkan pengaturan baris sederhana, misalnya kolom, dan rata kiri-kanan-tengah.
Kasus yang umum terjadi misalnya, ketika membuat dokumen yang akan dicetak dengan menggunakan printer Dot Matrix, misalnya membuat nota penjualan. Meskipun, tentu saja, bisa juga mencetak PDF langsung di printer tersebut, namun umumnya akan memakan waktu lebih lama dan hasilnya mungkin tidak sebagus jika mencetak file *.txt saja.
Misalnya, ingin membuat dokumen teks seperti berikut
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Toko Terang Gelap Jln. Lampu Senter No 33 Kota Senja ======================================== Nota No. 778899 29/10/2015 11:23:55 ---------------------------------------- Qty Nama Barang Total ---------------------------------------- 1 Item 1 10 2 Item 2 200 3 Item 3 3000 4 Item 4 40000 5 Item 5 500000 ---------------------------------------- Terima Kasih Atas Kunjungan Anda ======================================== |
Perhatikan bahwa dokumen tersebut hanya berupa teks saja, tanpa format yang Rich. Format yang ada hanyalah rata kiri, kanan, dan tengah. Namun format tersebut dapat pula diaplikasikan di dalam 1 baris, dengan kolom-kolom seperti tabel.
Format rata kiri, kanan, tengah tersebut sebenarnya hanya dihasilkan dengan jumlah spasi yang tepat agar dalam 1 baris, teks yang diinginkan dapat diletakkan di bagian yang sesuai.
Kembali ke topik tentang penggunaan Java untuk membuat dokumen seperti ini. Dokumen diatas dihasilkan dengan script Java berikut ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public static void main(String[] args){ LineFormatter lf = new LineFormatter(40); lf.addLine("Toko Terang Gelap", LineFormatter.CENTER_ALIGN); lf.addLine("Jln. Lampu Senter No 33", LineFormatter.CENTER_ALIGN); lf.addLine("Kota Senja", LineFormatter.CENTER_ALIGN); lf.addDivider("="); lf.addLine( new LineColumn("Nota No. 778899", 20) .addColumn("29/10/2015 11:23:55", 20, LineFormatter.RIGHT_ALIGN) ); lf.addDivider("-"); lf.addLine( new LineColumn("Qty", 5, LineFormatter.CENTER_ALIGN) .addColumn("Nama Barang", 25, LineFormatter.CENTER_ALIGN) .addColumn("Total", 10, LineFormatter.CENTER_ALIGN) ); lf.addDivider("-"); for(int i = 1; i <= 5; i++){ lf.addLine( new LineColumn(i + " ", 5, LineFormatter.CENTER_ALIGN) .addColumn("Item " + i, 25) .addColumn("" + (i * ((int)Math.pow(10, i))), 10, LineFormatter.RIGHT_ALIGN) ); } lf.addDivider("-"); lf.addLine("Terima Kasih", LineFormatter.CENTER_ALIGN); lf.addLine("Atas Kunjungan Anda", LineFormatter.CENTER_ALIGN); lf.addDivider("="); System.out.println( lf.render() ); } |
Disini, yang saya gunakan adalah class LineFormatter
dan LineColumn
.
LineFormatter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | package gaisma.components.plaintext; import gaisma.Params; import java.util.ArrayList; import java.util.List; /** * Created with IntelliJ IDEA. * User: lee * Date: 11/29/13 * Time: 9:28 PM * <p/> * Java Plain Text Line Formatter */ public class LineFormatter { public static final int LEFT_ALIGN = -1; public static final int CENTER_ALIGN = 0; public static final int RIGHT_ALIGN = 1; private int lineWidth; private List<String> lines; private String newLine = System.getProperty("line.separator"); public static String LEFT_MARGIN = ""; // nothing /** * Initialize LineFormatter with line width initialized as 40 (epson POS printer) */ public LineFormatter() { init(40); } /** * Initialize LineFormatter with specified line width * * @param l : line width */ public LineFormatter(int l) { init(l); } /** * Set new line character, this is not necessary as LineFormatter automatically detect System new line character * * @param n : new line character * @return current LineFormatter instance */ public LineFormatter setNewLine(String n) { this.newLine = n; return this; } private void init(int l) { this.lineWidth = l; lines = new ArrayList<String>(); } /** * add new line * * @param cols LineColumn Class instance from whose columns constructed as line * @return current LineFormatter instance */ public LineFormatter addLine(LineColumn cols) { return addLine(cols.getLine()); } /** * add new line, with LineFormatter.LEFT_ALIGN * * @param s line to be added * @return current LineFormatter instance */ public LineFormatter addLine(String s) { return addLine(s, LEFT_ALIGN); } /** * add new line, with specified alignment * * @param s line to be added * @param align * @return current LineFormatter instance */ public LineFormatter addLine(String s, int align) { switch (align) { case LEFT_ALIGN: return saveLine(String.format("%-" + this.lineWidth + "s", s)); case RIGHT_ALIGN: return saveLine(String.format("%" + this.lineWidth + "s", s)); case CENTER_ALIGN: int sw = s.length(); int pad = (this.lineWidth - sw) / 2; String l = String.format("%" + pad + "s%s%" + pad + "s", "", s, ""); return addLine(l, RIGHT_ALIGN); } return null; } private LineFormatter saveLine(String s) { if (s.length() > this.lineWidth) s = s.substring(0, this.lineWidth); this.lines.add(LEFT_MARGIN + s); return this; } /** * add blank line * * @return current LineFormatter instance */ public LineFormatter addDivider() { return addLine(" "); } /** * add line with repeated character * * @param s single string to be repeated * @return current LineFormatter instance */ public LineFormatter addDivider(String s) { return addLine( String.format("%" + lineWidth + "s", s) .replace(' ', s.charAt(0)) ); } /** * produce formatted lines * * @return rendered string */ public String render() { String text = ""; if (lines.size() > 0) { text = lines.get(0); } for (int i = 1; i < lines.size(); i++) { text += this.newLine + lines.get(i); } return text; } /** * clear all buffered line * * @return current LineFormatter instance */ public LineFormatter reset() { lines.clear(); return this; } } |
LineColumn.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package gaisma.components.plaintext; import java.util.ArrayList; import java.util.List; /** * Created with IntelliJ IDEA. * User: lee * Date: 11/29/13 * Time: 9:39 PM */ public class LineColumn { private List<String> columns = new ArrayList<String>(); public LineColumn(){ } public LineColumn(String s, int width){ this.addColumn(s, width); } public LineColumn addBlankSpace(int width){ return this.addColumn(" ", width); } public LineColumn(String s, int width, int align){ addColumn(s, width, align); } public LineColumn addColumn(String s, int width){ return addColumn(s, width, LineFormatter.LEFT_ALIGN); } public LineColumn addColumn(String s, int width, int align){ if(s.length() > width) s = s.substring(0, width); switch (align){ case LineFormatter.LEFT_ALIGN: columns.add(String.format("%-" + width + "s", s)); break; case LineFormatter.RIGHT_ALIGN: columns.add(String.format("%" + width + "s", s)); break; case LineFormatter.CENTER_ALIGN: int sw = s.length(); int pad = (width - sw) / 2; String l = String.format("%" + pad + "s%s%" + pad + "s", "", s, ""); return addColumn(l, width, LineFormatter.RIGHT_ALIGN); } return this; } public String getLine(){ String line = ""; for(int i = 0; i < columns.size(); i++){ line += columns.get(i); } return line; } } |
LineFormatter adalah class utama yang akan membuat format teks dapat diatur agar ditempatkan dalam format rata kiri, kanan, atau tengah. Sedangkan LineColumn, berguna agar dalam 1 baris, dapat dibuat beberapa kolom, yang masing-masing kolom dapat diberikan format sendiri sendiri.
Dua class ini saya buat karena punya kebutuhan membuat dokumen teks sederhana, dan aplikasinya sendiri diusahakan agar dapat berukuran sekecil-kecilnya. Pencarian singkat di Google tidak membuahkan hasil library yang sesuai, dan alasan itulah yang membuat saya menciptakan library ini.
Atau mungkin Anda tahu Library yang lain? Comment ya.
Terima kasih, semoga bisa berguna untuk kita semua.
Java Swing, tampilan Calculator dengan GridBagLayout
Post kali ini, saya memberikan source code untuk membangun tampilan Calculator dengan Java Swing, menggunakan GridBagLayout. Continue Reading…
Menggambar Monas
Post ini sebenarnya bukan berisi tutorial atau sejenisnya. Hanya sekedar penasaran aja. Ada kenalan yang bertanya mengenai algoritma pemrograman menggambar Monas dengan barisan karakter bintang ‘*’. Continue Reading…
Java, Menampilkan IP Address di Komputer
Pada aplikasi jaringan, terkadang akan ada kebutuhan untuk mengambil perangkat atau interface jaringan yang terhubung di komputer tersebut, sekaligus mengetahui alamat IP yang ada di perangkat tersebut.
Continue Reading…
Java UTF8 Binary Converter
Baca postingan forum di social media, ada masalah mengenai konversi UTF-8 ke bentuk binary dan sebaliknya. Meskipun sebenarnya saya kurang jelas yang diinginkan oleh si penulis, namun telah diarahkan ke contoh demo. Continue Reading…
Menjalankan Script/Aplikasi dari Java, Contoh mengambil ID Processor di Windows
Post ini sebenarnya adalah bagian dari post mengenai proses eksternal di Java beberapa waktu lalu. Namun, kali ini saya menekankan script untuk menjalankan perintah/script/aplikasi (kedepannya saya sebut aplikasi saja) yang bersifat cepat dan sekali pakai untuk mengambil output dari aplikasi tersebut.
Continue Reading…
Aplikasi Antrian Sederhana
Kali ini saya ingin memberikan source code aplikasi antrian sederhana. Kunci dari aplikasi ini adalah ada (lebih dari 1 operator) yang akan memanggil customer yang sudah mengantri.