Skip to content

Instantly share code, notes, and snippets.

@resarahadian
Created December 18, 2013 23:45
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save resarahadian/8031855 to your computer and use it in GitHub Desktop.
Spinner di dalam JTable
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