[英]How to remove moved items from a Jlist?
我正在嘗試刪除移到第二個Jlist的項目。 我一直在嘗試使用兩個不同的代碼來執行此操作,一個使用HashSet,另一個使用Arrays和For循環。
HashSet方法:
//So far my code moves the items.
Set<Integer> keepThese = new HashSet<>();
int sel[] = lstLista1.getSelectedIndices();
for (int x : sel) {
keepThese.add(x);
}
for (int i=0 ; i< modelo1.getSize() ; i++) {
if(keepThese.contains(i)) {
} else {
if(modelo2.contains(modelo1.getElementAt(i))) {
} else {
modelo2.addElement(modelo1.getElementAt(i));
}
}
}
數組和For循環
int indices[] = lstLista1.getSelectedIndices();
String arreglo[] = new String[indices.length];
for (int i = 0; i < indices.length; i++) {
arreglo[i] = modelo1.getElementAt(indices[i]).toString();
}
for (int i = indices.length-1; i >= 0; i--) {
if(modelo2.contains(modelo1.getElementAt(indices[i]))) {
} else {
modelo1.remove(indices[i]);
}
}
for (int i = 0; i < modelo1.getSize(); i++) {
if(!modelo2.contains(modelo1.getElementAt(i))) {
modelo2.addElement(modelo1.getElementAt(i));
}
}
modelo1.removeAllElements();
for (int i = 0; i < arreglo.length; i++) {
modelo1.addElement(arreglo[i]);
}
我不確定為什么會有4個循環?
您需要分兩個步驟(即兩個循環)進行操作:
步驟1應該很簡單。 只需創建一個循環以獲取每個索引處的數據,然后將其添加到另一個ListModel中即可。 假設您使用的是DefaultListModel,則代碼如下所示:
for (int i = 0; i < indices.length; i++) {
model2.addElement( model1.getElementAt(indices[i]) );
這是第2步的示例。它演示了JList和JTable的邏輯:
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.*;
import javax.swing.table.*;
public class ItemDeletion extends JPanel
{
private JList<String> list;
private JTable table;
public ItemDeletion()
{
setLayout( new BorderLayout(5, 5) );
String[] items =
{
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten"
};
// Add the list
DefaultListModel<String> listModel = new DefaultListModel<String>();
for (String item: items)
listModel.addElement( item );
list = new JList<String>( listModel );
JButton listDelete = new JButton( "Delete From List" );
listDelete.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
DefaultListModel model = (DefaultListModel)list.getModel();
int row = list.getSelectedIndex();
while (row != -1)
{
model.removeElementAt( row );
row = list.getSelectedIndex();
}
}
});
JPanel listPanel = new JPanel( new BorderLayout(5, 5) );
listPanel.add(new JScrollPane( list ), BorderLayout.CENTER);
listPanel.add(listDelete, BorderLayout.PAGE_END);
// Add the table
DefaultTableModel tableModel = new DefaultTableModel(0, 1);
List<String> tableItems = Arrays.asList( items );
Collections.shuffle( tableItems );
for (String item: tableItems)
{
System.out.println( item );
tableModel.addRow( new String[]{item} );
}
table = new JTable( tableModel );
table.setAutoCreateRowSorter(true);
((DefaultRowSorter)table.getRowSorter()).toggleSortOrder(0);
JButton tableDelete = new JButton( "Delete From Table" );
tableDelete.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
DefaultTableModel model = (DefaultTableModel)table.getModel();
int row = table.getSelectedRow();
while (row != -1)
{
int modelRow = table.convertRowIndexToModel( row );
model.removeRow( modelRow );
row = table.getSelectedRow();
}
}
});
JPanel tablePanel = new JPanel( new BorderLayout(5, 5) );
tablePanel.add(new JScrollPane( table ), BorderLayout.CENTER);
tablePanel.add(tableDelete, BorderLayout.PAGE_END);
add(listPanel, BorderLayout.LINE_START);
add(tablePanel, BorderLayout.LINE_END);
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("Multiple Item Deletion");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new ItemDeletion(), BorderLayout.NORTH);
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.