- 论坛徽章:
- 0
|
其实这只不过是先前
java Swing List
的扩展。用两种不同的方法来实现相同的功能。
先前采用的是double click的方法来实现list之间item的添加和删除。今天说的是用按钮事件来完成任务。
其实两者都差不多,都是让list 与 dataModel 相关联,然后根据其 addData, removeIndex等函数来实现的。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.applet.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.TitledBorder;
public class ListButton extends JApplet {
JList list1 =null;
JList list2 = null;
String[]strN = {"z"};
String[] strM = {"a","b","c","d","e","f","g","h","i"};
JButton btnAdd, btnDelete;
private DataModel dataM= null,dataN=null;//你好
public void ListButton(){
}
public void init(){
try{
listButtonInit();
}catch (Exception e){
e.printStackTrace();
}
}
public void listButtonInit(){
Container container = getContentPane();
container.setLayout(null);
dataM = new DataModel(strM);
list1 = new JList(dataM);
list1.setDragEnabled(true);
list1.setBorder(BorderFactory.createTitledBorder("M_infor"));
JScrollPane mPane = new JScrollPane(list1);
mPane.setBounds(50, 20, 160, 200);
container.add(mPane);
dataN = new DataModel(strN);
list2 = new JList(dataN);
list2.setDragEnabled(true);
list2.setBorder(BorderFactory.createTitledBorder("N_infor"));
JScrollPane nPane = new JScrollPane(list2);
nPane.setBounds(320,20,160,200);
container.add(nPane);
btnAdd = new JButton("ADD");
btnAdd.setBounds(230, 80, 80, 25);
container.add(btnAdd);
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int index = list1.getSelectedIndex();
System.out.println(index);
if(index == -1 || index >= dataM.getSize())
return;
dataN.addData(strM[index]);
list1.updateUI();
list2.updateUI();
}
});
btnDelete = new JButton("Delete");
btnDelete.setBounds(230,160,80, 25);
container.add(btnDelete);
btnDelete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int index = list2.getSelectedIndex();
System.out.println(index);
if(index == -1 || index >= dataN.getSize())
return;
dataN.removeIndex(index);
list2.updateUI();
}
});
}
class DataModel extends AbstractListModel{
private Vector data = null;
public DataModel(Object [] listData){
data = new Vector();
for(int i = 0; i listData.length; i++){
data.add(listData);
}
}
public void addData(Object o){
data.add(o);
}
public void removeIndex(int index){
data.remove(index);
}
public int getSize() {
return data.size();
}
public Object getElementAt(int index) {
return data.get(index);
}
}
public static void main(String[] args) {
ListButton ls = new ListButton();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(ls, BorderLayout.CENTER);
frame.setTitle("Read Card");
ls.init();
ls.start();
frame.setSize(480, 580);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
frame.setLocation((d.width - frameSize.width) / 2,
(d.height - frameSize.height) / 2);
frame.setVisible(true);
}
}
![]()
这是效果图。
只不过编译的时候
E:\eclipse\workplace\ListWithButton>javac *.java
注意:ListButton.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
E:\eclipse\workplace\ListWithButton>javac -Xlint:unchecked *.java
ListButton.java:89: 警告:[unchecked] 对作为普通类型 java.util.Vector 的成员的 a
dd(E) 的调用未经检查
data.add(listData);
^
ListButton.java:93: 警告:[unchecked] 对作为普通类型 java.util.Vector 的成员的 a
dd(E) 的调用未经检查
data.add(o);
^
2 警告
还需要一些改进。
若阁下知道问题解决方法,不妨留个言。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21684/showart_248348.html |
|