2016-06-11 6 views
-2

조금 스윙을 배우면서 프로그래밍을 시작합니다. 나는 Netbeans의 Visual IDE를 사용하여 praticing했다; 그건 쉽지. 폼에 추가 할 구성 요소를 클릭하기 만하면됩니다. 인터넷에 example이 있고 두 개가 JList입니다. 세 번째를 추가해야하지만 그래픽 인터페이스가 없으므로 모르겠다. 그것은 코드에서 한 것입니다. 양식 끝 부분에 3 분의 1을 추가하도록 도와 줄 수 있습니까? 수정 된 코드 원래 aplication 실행의 사진 ISS이 예제에서 세 번째 JList를 추가하는 방법

이 :

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

이와 같이 350 줄의 코드를 덤프하지 마십시오. [mcve]를 만드십시오. 또한 [ask]를 참조하십시오. – Tunaki

+2

'인터넷에서 2 개의 목록이있는 예를 발견했습니다. 세 번째를 추가해야하지만, 그래픽 인터페이스가 없으므로 모르겠군요. - 글쎄요, 당신이 어떤 코드를 찾을 때마다 질문하지 말기를 바랍니다. 네가하고 싶은 일을 정확하게해라. 코드 예제의 요점은 몇 가지 기본 사항을 익히고 수정하는 것입니다. 이 패널에 다른 구성 요소를 추가하려면 [GridBagLayout 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag)에서 스윙 튜토리얼의 섹션을 읽어 보는 것이 좋습니다. .html). 모든 제약 조건이 어떻게 사용되는지 설명 할 것입니다. – camickr

+1

다른 옵션은 JList를 프레임 자체에 추가하는 것입니다. 그런 다음 내용 분할 창의'BorderLayout.PAGE_END'에 추가 할 수 있습니다. 이 튜토리얼에는 프레임의 내용 창에 대한 기본 레이아웃 관리자 인 'How to Use BorderLayout'에 대한 섹션도 있습니다. – camickr

답변

1

example에서 시작은 here을 인용하고이 주제에 대한 이전 question에, 단지에 초점을 레이아웃에서 아래 표시된 것처럼 관련 필드와 구성 요소를 추가하십시오. GridBagConstraintsgridx이 이제 3 인 것을 제외하고는 이전 열의 것과 동일한 지 확인하십시오. 이는 새 네 번째 열을 나타냅니다. 이유는 here을 논의하기위한 나중에 main()에서

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)); 
} 

image

, 나는 f.pack()f.setsize()을 대체 할 것이다.

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

here으로 표시되는 중첩 된 레이아웃을 고려하십시오.