2016-06-11 14 views
-2

Ich fange an zu programmieren, lerne ein wenig Swing. Ich praktizierte die Visual IDE von Netbeans; das ist einfach. Ich klicke einfach auf die Komponenten, die zu Form hinzugefügt werden sollen. Ich habe eine example im Internet gefunden, die zwei JList s haben. Ich muss eine dritte hinzufügen, aber ich weiß nicht, weil es keine grafische Schnittstelle gibt; es wurde im Code gemacht. Kannst du mir helfen, am Ende des Formulars eine dritte hinzuzufügen?Wie füge ich eine dritte JList in diesem Beispiel hinzu

Diese iss den modifizierten Code und ein Foto des ursprünglichen aplication Laufes:

http://i.stack.imgur.com/AORrZ.jpg

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collection; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import java.util.SortedSet; 
import java.util.TreeSet; 

import javax.swing.AbstractListModel; 
import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.ListCellRenderer; 
import javax.swing.ListModel; 

import br.com.project.receita.dao.IngredienteDao; 
import br.com.project.receita.vo.IngredienteVo; 

public class DualListBox extends JPanel { 

    private static final Insets EMPTY_INSETS = new Insets(0, 0, 0, 0); 

    private static final String ADD_BUTTON_LABEL = "Adicionar >>"; 

    private static final String REMOVE_BUTTON_LABEL = "<< Remover"; 

    private static final String INGREDIENTES_DISPONIVEIS = "Ingredientes Disponíveis"; 

    private static final String INGREDIENTES_SELECIONADOS = "Ingredientes Selecionados"; 

    private static final String RECEITAS_DISPONIVEIS = "Receitas Disponíveis"; 

    private JLabel sourceLabel; 

    private JList sourceList; 

    private SortedListModel sourceListModel; 

    private JList destList; 

    private SortedListModel destListModel; 

    private JLabel destLabel; 

    private JButton addButton; 

    private JButton removeButton; 


    public DualListBox() { 
    initScreen(); 
    } 

    public String getSourceChoicesTitle() { 
    return sourceLabel.getText(); 
    } 

    public void setSourceChoicesTitle(String newValue) { 
    sourceLabel.setText(newValue); 
    } 

    public String getDestinationChoicesTitle() { 
    return destLabel.getText(); 
    } 

    public void setDestinationChoicesTitle(String newValue) { 
    destLabel.setText(newValue); 
    } 

    public void clearSourceListModel() { 
    sourceListModel.clear(); 
    } 

    public void clearDestinationListModel() { 
    destListModel.clear(); 
    } 

    public void addSourceElements(ListModel newValue) { 
    fillListModel(sourceListModel, newValue); 
    } 

    public void setSourceElements(ListModel newValue) { 
    clearSourceListModel(); 
    addSourceElements(newValue); 
    } 

    public void addDestinationElements(ListModel newValue) { 
    fillListModel(destListModel, newValue); 
    } 

    private void fillListModel(SortedListModel model, ListModel newValues) { 
    int size = newValues.getSize(); 
    for (int i = 0; i < size; i++) { 
     model.add(newValues.getElementAt(i)); 
    } 
    } 

    public void addSourceElements(Object newValue[]) { 
    fillListModel(sourceListModel, newValue); 
    } 

    public void setSourceElements(Object newValue[]) { 
    clearSourceListModel(); 
    addSourceElements(newValue); 
    } 

    public void addDestinationElements(Object newValue[]) { 
    fillListModel(destListModel, newValue); 
    } 

    private void fillListModel(SortedListModel model, Object newValues[]) { 
    model.addAll(newValues); 
    } 

    public Iterator sourceIterator() { 
    return sourceListModel.iterator(); 
    } 

    public Iterator destinationIterator() { 
    return destListModel.iterator(); 
    } 

    public void setSourceCellRenderer(ListCellRenderer newValue) { 
    sourceList.setCellRenderer(newValue); 
    } 

    public ListCellRenderer getSourceCellRenderer() { 
    return sourceList.getCellRenderer(); 
    } 

    public void setDestinationCellRenderer(ListCellRenderer newValue) { 
    destList.setCellRenderer(newValue); 
    } 

    public ListCellRenderer getDestinationCellRenderer() { 
    return destList.getCellRenderer(); 
    } 

    public void setVisibleRowCount(int newValue) { 
    sourceList.setVisibleRowCount(newValue); 
    destList.setVisibleRowCount(newValue); 
    } 

    public int getVisibleRowCount() { 
    return sourceList.getVisibleRowCount(); 
    } 

    public void setSelectionBackground(Color newValue) { 
    sourceList.setSelectionBackground(newValue); 
    destList.setSelectionBackground(newValue); 
    } 

    public Color getSelectionBackground() { 
    return sourceList.getSelectionBackground(); 
    } 

    public void setSelectionForeground(Color newValue) { 
    sourceList.setSelectionForeground(newValue); 
    destList.setSelectionForeground(newValue); 
    } 

    public Color getSelectionForeground() { 
    return sourceList.getSelectionForeground(); 
    } 

    private void clearSourceSelected() { 
    Object selected[] = sourceList.getSelectedValues(); 
    for (int i = selected.length - 1; i >= 0; --i) { 
     sourceListModel.removeElement(selected[i]); 
    } 
    sourceList.getSelectionModel().clearSelection(); 
    } 

    private void clearDestinationSelected() { 
    Object selected[] = destList.getSelectedValues(); 
    for (int i = selected.length - 1; i >= 0; --i) { 
     destListModel.removeElement(selected[i]); 
    } 
    destList.getSelectionModel().clearSelection(); 
    } 

    private void initScreen() { 
    setBorder(BorderFactory.createEtchedBorder()); 
    setLayout(new GridBagLayout()); 
    sourceLabel = new JLabel(INGREDIENTES_DISPONIVEIS); 
    JButton button = new JButton("Buscar"); 
    add(button, new GridBagConstraints(1, 3, 1, 2, 0, .25, 
     GridBagConstraints.CENTER, GridBagConstraints.NONE, 
     EMPTY_INSETS, 0, 0)); 
    button.addActionListener(new PrintListener()); 

    sourceListModel = new SortedListModel(); 
    sourceList = new JList(sourceListModel); 
    add(sourceLabel, new GridBagConstraints(0, 0, 1, 1, 0, 0, 
     GridBagConstraints.CENTER, GridBagConstraints.NONE, 
     EMPTY_INSETS, 0, 0)); 
    add(new JScrollPane(sourceList), new GridBagConstraints(0, 1, 1, 5, .5, 
     1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, 
     EMPTY_INSETS, 0, 0)); 

    addButton = new JButton(ADD_BUTTON_LABEL); 
    add(addButton, new GridBagConstraints(1, 2, 1, 2, 0, .25, 
     GridBagConstraints.CENTER, GridBagConstraints.NONE, 
     EMPTY_INSETS, 0, 0)); 
    addButton.addActionListener(new AddListener()); 
    removeButton = new JButton(REMOVE_BUTTON_LABEL); 
    add(removeButton, new GridBagConstraints(1, 4, 1, 2, 0, .25, 
     GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(
      0, 5, 0, 5), 0, 0)); 
    removeButton.addActionListener(new RemoveListener()); 

    destLabel = new JLabel(INGREDIENTES_SELECIONADOS); 
    destListModel = new SortedListModel(); 
    destList = new JList(destListModel); 
    add(destLabel, new GridBagConstraints(2, 0, 1, 1, 0, 0, 
     GridBagConstraints.CENTER, GridBagConstraints.NONE, 
     EMPTY_INSETS, 0, 0)); 
    add(new JScrollPane(destList), new GridBagConstraints(2, 1, 1, 5, .5, 
     1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, 
     EMPTY_INSETS, 0, 0)); 
    } 

    public static void main(String args[]) { 
    JFrame f = new JFrame("Dual List Box Tester"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    List<IngredienteVo> listaIngredientes = new ArrayList<IngredienteVo>(); 
    DualListBox dual = new DualListBox(); 
    Map<String, IngredienteVo> mapCodigoIngredientes = new HashMap(); 
    int i = 0; 
    IngredienteDao ingredienteDao = new IngredienteDao(); 

    listaIngredientes = ingredienteDao.getIngredientesList(); 

    String[] myArray = new String[listaIngredientes.size()]; 

    for (IngredienteVo IngredienteVo : listaIngredientes) { 
     myArray[i] = IngredienteVo.getNome(); 
     i++; 

     mapCodigoIngredientes.put(IngredienteVo.getNome(), IngredienteVo); 
    } 

    dual.addSourceElements(myArray); 

    f.getContentPane().add(dual, BorderLayout.CENTER); 
    f.setSize(400, 300); 
    f.setVisible(true); 
    } 

    private class AddListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     Object selected[] = sourceList.getSelectedValues(); 
     addDestinationElements(selected); 
     clearSourceSelected(); 
    } 
    } 

    private class RemoveListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     Object selected[] = destList.getSelectedValues(); 
     addSourceElements(selected); 
     clearDestinationSelected(); 
    } 
    } 

    class PrintListener implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     int selected[] = destList.getSelectedIndices(); 
     System.out.println("Selected Elements: "); 

     for (int i = 0; i < destList.getModel().getSize(); i++) { 
     Object element = destList.getModel().getElementAt(i); 
     System.out.println("Item - " + element); 
     } 
    } 
    } 
} 

class SortedListModel extends AbstractListModel { 

    SortedSet model; 

    public SortedListModel() { 
    model = new TreeSet(); 
    } 

    public int getSize() { 
    return model.size(); 
    } 

    public Object getElementAt(int index) { 
    return model.toArray()[index]; 
    } 

    public void add(Object element) { 
    if (model.add(element)) { 
     fireContentsChanged(this, 0, getSize()); 
    } 
    } 

    public void addAll(Object elements[]) { 
    Collection c = Arrays.asList(elements); 
    model.addAll(c); 
    fireContentsChanged(this, 0, getSize()); 
    } 

    public void clear() { 
    model.clear(); 
    fireContentsChanged(this, 0, getSize()); 
    } 

    public boolean contains(Object element) { 
    return model.contains(element); 
    } 

    public Object firstElement() { 
    return model.first(); 
    } 

    public Iterator iterator() { 
    return model.iterator(); 
    } 

    public Object lastElement() { 
    return model.last(); 
    } 

    public boolean removeElement(Object element) { 
    boolean removed = model.remove(element); 
    if (removed) { 
     fireContentsChanged(this, 0, getSize()); 
    } 
    return removed; 
    } 

} 
+2

Bitte nicht 350 Zeilen Code wie folgt ablegen. Mach ein [mcve]. Siehe auch [fragen]. – Tunaki

+2

'Ich fand ein Beispiel im Internet, das 2 Jlists hat, ich muss ein drittes hinzufügen, aber ich weiß nicht, weil es kein grafisches Interface gibt' - ich hoffe, Sie stellen keine Frage jedes Mal, wenn Sie einen Code finden, der doesn ' t mach genau, was du willst. Der Sinn von Codebeispielen besteht darin, einige Grundlagen zu lernen und diese dann zu ändern. Wenn Sie diesem Panel eine weitere Komponente hinzufügen möchten, empfehle ich Ihnen, zuerst den Abschnitt aus dem Swing-Lernprogramm zu [Verwendung von GridBagLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag) zu lesen .html). Es wird erläutert, wie alle Einschränkungen verwendet werden. – camickr

+1

Oder die andere Option besteht darin, nur die JList dem Rahmen selbst hinzuzufügen. Dann können Sie es einfach zum "BorderLayout.PAGE_END" des Inhaltsbereichs hinzufügen. Das Lernprogramm enthält auch einen Abschnitt über die Verwendung eines BorderLayouts, bei dem es sich um den Standard-Layout-Manager des Inhaltsbereichs des Rahmens handelt. – camickr

Antwort

1

vom example Ab zitiert here und in Ihren bisherigen question zu diesem Thema, und die Konzentration auf nur die Layout, fügen Sie die relevanten Felder und Komponenten wie unten gezeigt hinzu. Beachten Sie, dass die GridBagConstraints identisch sind mit denen der vorherigen Spalte mit der Ausnahme, dass gridx jetzt 3 ist, die die neue vierte Spalte darstellt.

image

private JList newList; 
private SortedListModel newListModel; 
… 
private void initScreen() { 
    … 
    JLabel newLabel = new JLabel("More Choices"); 
    newListModel = new SortedListModel<>(); 
    newList = new JList(newListModel); 
    add(newLabel, new GridBagConstraints(3, 0, 1, 1, 0, 0, 
     GridBagConstraints.CENTER, GridBagConstraints.NONE, 
     EMPTY_INSETS, 0, 0)); 
    add(new JScrollPane(newList), new GridBagConstraints(3, 1, 1, 5, .5, 
     1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, 
     EMPTY_INSETS, 0, 0)); 
} 

Später in main(), würde ich f.setsize() mit f.pack() ersetzen für die Gründe here diskutiert.

public static void main(String args[]) { 
    … 
    f.add(dual, BorderLayout.CENTER); 
    // f.setSize(400, 300); 
    f.pack(); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
} 

Betrachten Sie auch ein verschachteltes Layout, gesehen here.

Verwandte Themen