Spinner di dalam JTable
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.Component; | |
import java.awt.EventQueue; | |
import java.awt.event.FocusEvent; | |
import java.awt.event.FocusListener; | |
import java.awt.event.KeyEvent; | |
import java.util.EventObject; | |
import javax.swing.DefaultCellEditor; | |
import javax.swing.JFrame; | |
import javax.swing.JPanel; | |
import javax.swing.JSpinner; | |
import javax.swing.JTextField; | |
import javax.swing.SwingUtilities; | |
import javax.swing.UnsupportedLookAndFeelException; | |
import javax.swing.border.EmptyBorder; | |
import javax.swing.JScrollPane; | |
import javax.swing.JTable; | |
import javax.swing.table.DefaultTableModel; | |
import javax.swing.table.TableColumn; | |
import javax.swing.table.TableColumnModel; | |
import javax.swing.JLabel; | |
import javax.swing.ImageIcon; | |
@SuppressWarnings("serial") | |
public class frameSpinnerTable extends JFrame { | |
private JPanel contentPane; | |
private JScrollPane scrollPane; | |
private JTable tabel; | |
DefaultTableModel tabelModel; | |
String header[] = {"KdBarang","Nama","Harga", "Jumlah"}; | |
Object isi[][] = {{"B001", "PC", "2500000", 1}, {"B002", "Laptop", "5000000", 0}, {"B003", "Smartphone", "800000", 3}}; | |
private JLabel lblWall; | |
private JLabel lblIcon; | |
/** | |
* Create the frame. | |
*/ | |
public frameSpinnerTable() | |
{ | |
setTitle("Spinner Inside JTable"); | |
setResizable(false); | |
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
setBounds(100, 100, 699, 389); | |
contentPane = new JPanel(); | |
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); | |
setContentPane(contentPane); | |
contentPane.setLayout(null); | |
setLocationRelativeTo(null); | |
scrollPane = new JScrollPane(); | |
scrollPane.setBounds(12, 12, 451, 236); | |
contentPane.add(scrollPane); | |
tabelModel = new DefaultTableModel(isi,header); | |
tabel = new JTable(); | |
tabel.setModel(tabelModel); | |
scrollPane.setViewportView(tabel); | |
lblIcon = new JLabel(""); | |
lblIcon.setIcon(new ImageIcon("/home/resa/Aplikasi Java/SwingJava/src/spinnerInsideJTable/icon.png")); | |
lblIcon.setBounds(506, 58, 143, 138); | |
contentPane.add(lblIcon); | |
lblWall = new JLabel(""); | |
lblWall.setIcon(new ImageIcon("/home/resa/Aplikasi Java/SwingJava/src/spinnerInsideJTable/wall.png")); | |
lblWall.setBounds(0, -12, 697, 375); | |
contentPane.add(lblWall); | |
TableColumnModel kolomModel = tabel.getColumnModel(); | |
TableColumn tc = kolomModel.getColumn(3); | |
tc.setCellEditor(new ModifySpinner()); | |
} | |
public static class ModifySpinner extends DefaultCellEditor | |
{ | |
JSpinner spin; | |
JSpinner.DefaultEditor spinEdit; | |
JTextField txt; | |
boolean valueSet; | |
public ModifySpinner() | |
{ | |
super(new JTextField()); | |
// TODO Auto-generated constructor stub | |
spin = new JSpinner(); | |
spinEdit = ((JSpinner.DefaultEditor)spin.getEditor()); | |
txt = spinEdit.getTextField(); | |
txt.addFocusListener(new FocusListener() | |
{ | |
@Override | |
public void focusGained(FocusEvent e) { | |
// TODO Auto-generated method stub | |
SwingUtilities.invokeLater(new Runnable() | |
{ | |
@Override | |
public void run() { | |
// TODO Auto-generated method stub | |
if(valueSet) | |
{ | |
txt.setCaretPosition(1); | |
} | |
} | |
}); | |
} | |
@Override | |
public void focusLost(FocusEvent e) { | |
// TODO Auto-generated method stub | |
} | |
}); | |
} | |
public Component getTableCellEditorComponent(JTable tabel, Object obj, boolean isSelected, int baris, int kolom) | |
{ | |
if(!valueSet) | |
{ | |
spin.setValue(obj); | |
} | |
SwingUtilities.invokeLater(new Runnable() | |
{ | |
@Override | |
public void run() { | |
// TODO Auto-generated method stub | |
txt.requestFocus(); | |
} | |
}); | |
return spin; | |
} | |
public boolean isCellEditable(EventObject eo) | |
{ | |
if(eo instanceof KeyEvent) | |
{ | |
@SuppressWarnings("unused") | |
KeyEvent ke = (KeyEvent) eo; | |
txt.select(1, 1); | |
txt.setCaretPosition(1); | |
txt.moveCaretPosition(1); | |
valueSet = true; | |
} | |
else | |
{ | |
valueSet = false; | |
} | |
return true; | |
} | |
public Object getCellEditorValue() | |
{ | |
return spin.getValue(); | |
} | |
} | |
/** | |
* Launch the application. | |
*/ | |
public static void main(String[] args) { | |
EventQueue.invokeLater(new Runnable() { | |
public void run() { | |
try { | |
//Tambahkan kode ini untuk membuat GTK / Ubuntu Look and Feel | |
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) | |
{ | |
if ("com.sun.java.swing.plaf.gtk.GTKLookAndFeel".equals(info.getClassName())) | |
{ | |
try | |
{ | |
javax.swing.UIManager.setLookAndFeel(info.getClassName()); | |
frameSpinnerTable frame = new frameSpinnerTable(); | |
frame.setVisible(true); | |
} | |
catch (ClassNotFoundException e) | |
{ | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
} | |
catch (InstantiationException e) | |
{ | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
} | |
catch (IllegalAccessException e) | |
{ | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
} | |
catch (UnsupportedLookAndFeelException e) | |
{ | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
} | |
break; | |
} | |
} | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment