概要
今回は、作成したGUI コンポーネントをNetBeansのパレットに追加する方法について説明します。動作環境
・Java SE 6・NetBeans 6.9.1
・Mac OS X 10.6
前提事項
・特になし内容
やり方は至って簡単です。作成したGUIコンポーネントを選択し、「右クリック->ツール->パレットに追加」を選択します。
後は、パレットのどの位置にGUIコンポーネントを配置するか選択すればよいです。
public class DeleteButton extends JButton {
@Override
public void updateUI() {
super.updateUI();
setFocusable(false);
setText("削除");
}
}
public class DeleteButtonRenderer extends DeleteButton implements TableCellRenderer {
public DeleteButtonRenderer() {
super();
setName("Table.cellRenderer");
}
public Component getTableCellRendererComponent(
JTable jtable, Object o, boolean bln, boolean bln1, int i, int i1) {
return this;
}
}
セルに表示されるコンポーネントを返却するメソッド「getTableCellRendererComponent」でpublic class DeleteButtonEditor extends DeleteButton implements TableCellEditor {
public DeleteButtonEditor(final JTable table) {
super();
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
int row = table.convertRowIndexToModel(table.getEditingRow());
fireEditingStopped();
((DefaultTableModel)table.getModel()).removeRow(row);
}
});
}
public Component getTableCellEditorComponent(
JTable jtable, Object o, boolean bln, int i, int i1) {
return this;
}
public Object getCellEditorValue() {
return "";
}
public boolean isCellEditable(EventObject eo) {
return true;
}
public boolean shouldSelectCell(EventObject eo) {
return true;
}
public boolean stopCellEditing() {
fireEditingStopped();
return true;
}
public void cancelCellEditing() {
fireEditingCanceled();
}
public void addCellEditorListener(CellEditorListener cl) {
listenerList.add(CellEditorListener.class, cl);
}
public void removeCellEditorListener(CellEditorListener cl) {
listenerList.remove(CellEditorListener.class, cl);
}
public CellEditorListener[] getCellEditorListeners() {
return (CellEditorListener[])listenerList.getListeners(CellEditorListener.class);
}
protected void fireEditingStopped() {
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
for(int i = listeners.length-2; i>=0; i-=2) {
if(listeners[i]==CellEditorListener.class) {
// Lazily create the event:
if(changeEvent == null) changeEvent = new ChangeEvent(this);
((CellEditorListener)listeners[i+1]).editingStopped(changeEvent);
}
}
}
protected void fireEditingCanceled() {
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
for(int i = listeners.length-2; i>=0; i-=2) {
if(listeners[i]==CellEditorListener.class) {
// Lazily create the event:
if(changeEvent == null) changeEvent = new ChangeEvent(this);
((CellEditorListener)listeners[i+1]).editingCanceled(changeEvent);
}
}
}
}
DeleteButtonEditorのコンストラクタで、ボタン押下時のイベントを設定しています。new widets.DeleteButtonEditor(jTable1)※2011/05/20 追記
new widets.DeleteButtonRenderer()
public class SampleDTO {
private String userId;
private String userName;
public void setUserId(String userId) {
this.userId = userId;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserId() {
return userId;
}
public String getUserName() {
return userName;
}
}
public class SampleTable {
private List sampleDtoList =
ObservableCollections.observableList(new ArrayList());
public List getSampleDtoList() {
return this.sampleDtoList;
}
public void setSampleDtoList(List sampleDtoList) {
this.sampleDtoList = sampleDtoList;
}
〜〜〜中略〜〜〜
}
private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {
SampleDTO dto = new SampleDTO();
dto.setUserId("1");
dto.setUserName("しがのん");
this.sampleDtoList.add(dto);
}