2016-11-07 5 views
1

I want to make JCheckBox List to use arraylist into this left side JScrollPane. Aber diese JScrollPane nur einfügen und den letzten Index JCheckBox hinzufügen. Jeden Moment lass mich dieses Problem nicht lösen. Füge ich JList hinzu? Ich möchte das so schnell wie möglich lösen. Hier ist mein Code.Wie setze ich JCheckBox auf JScrollPane?

package dimi.voca; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import java.util.ArrayList; 
import javax.swing.JCheckBox; 
import javax.swing.ScrollPaneConstants; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.ScrollPane; 
import java.awt.event.ActionEvent; 
import javax.swing.JTextArea; 
import javax.swing.Box; 
import javax.swing.JList; 

public class LearnSelect extends JFrame 
{ 
    public LearnSelect() { 
     super("DimiVoca in PC"); 

     JPanel panel = new JPanel(); 
     setSize(650, 500); 

     getContentPane().setLayout(null); 

     JScrollPane scrollPane = new JScrollPane(); 

     JList list = new JList(); 
     panel.add(list); 

     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scrollPane.setToolTipText(""); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     scrollPane.setBounds(28, 10, 200, 441); 
     getContentPane().add(scrollPane); 

     ArrayList<JCheckBox> Day = new ArrayList<JCheckBox>(); 
     String label[] = { "Day 1", "Day 2", "Day 3", "Day 4", "Day 5", "Day 6", 
          "Day 7", "Day 8", "Day 9", "Day 10", "Day 11", "Day 12", 
          "Day 13", "Day 14", "Day 15", "Day 16", "Day 17", "Day 18", 
          "Day 19", "Day 20", "Day 21", "Day 22", "Day 23", "Day 24", 
          "Day 25", "Day 26", "Day 27", "Day 28", "Day 29", "Day 30", 
          "Day 31", "Day 32", "Day 33", "Day 34", "Day 35", "Day 36", 
          "Day 37", "Day 38", "Day 39", "Day 40", "Day 41", "Day 42", 
          "Day 43", "Day 44", "Day 45", "Day 46", "Day 47", "Day 48", 
          "Day 49", "Day 50", "Day 51", "Day 52", "Day 53", "Day 54", 
          "Day 55", "Day 56", "Day 57", "Day 58", "Day 59", "Day 60"}; 
     for(int i = 0; i <= label.length - 1; i++) 
     { 
      JCheckBox checkbox = new JCheckBox(label[i]); 
      Day.add(checkbox); 
      scrollPane.setViewportView(checkbox); 
     } 

     JScrollPane scrollPane_1 = new JScrollPane(); 
     scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); 
     scrollPane_1.setToolTipText(""); 
     scrollPane_1.setBounds(227, 10, 200, 441); 
     getContentPane().add(scrollPane_1); 

     JButton close = new JButton("\uB2EB\uAE30"); 
     close.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) 
      { 
       dispose(); 
      } 
     }); 
     close.setBounds(481, 428, 97, 23); 
     getContentPane().add(close); 

     JButton start = new JButton("\uC2DC\uC791"); 
     start.setBounds(481, 395, 97, 23); 
     getContentPane().add(start); 

     JCheckBox isRandom = new JCheckBox("\uB79C\uB364 \uD5C8\uC6A9"); 
     isRandom.setBounds(481, 100, 145, 23); 
     getContentPane().add(isRandom); 

     JCheckBox loadCreate = new JCheckBox("Create\uC5D0\uC11C \uBC1B\uC544\uC624\uAE30"); 
     loadCreate.setBounds(481, 150, 145, 23); 
     getContentPane().add(loadCreate); 

     setVisible(true); 
    } 
} 

Antwort

2

In Ihrer for-Schleife, sind Sie Ihre scrollpane der Ansichtsfenster Blick auf die letzten JCheckBox Einstellung, und es wird der einzige gesehen sein. Wenn Sie möchten, dass alle JCheckBoxen in der Bildlaufleiste angezeigt werden, erstellen Sie vor der for-Schleife ein JPanel, geben Sie ein GridLayout, und fügen Sie Ihre JCheckBoxes diesem einzelnen JPanel innerhalb der for-Schleife hinzu. Fügen Sie dann JPanel der Ansichtsfensteransicht von JScrollPane hinzu.

JPanel dayPanel = new JPanel(new GridLayout(0, 1)); // !! 

ArrayList<JCheckBox> Day = new ArrayList<JCheckBox>(); 
String label[] = { "Day 1", "Day 2", "Day 3", "Day 4", "Day 5", "Day 6", "Day 7", "Day 8", 
     "Day 9", "Day 10", "Day 11", "Day 12", "Day 13", "Day 14", "Day 15", "Day 16", 
     "Day 17", "Day 18", "Day 19", "Day 20", "Day 21", "Day 22", "Day 23", "Day 24", 
     "Day 25", "Day 26", "Day 27", "Day 28", "Day 29", "Day 30", "Day 31", "Day 32", 
     "Day 33", "Day 34", "Day 35", "Day 36", "Day 37", "Day 38", "Day 39", "Day 40", 
     "Day 41", "Day 42", "Day 43", "Day 44", "Day 45", "Day 46", "Day 47", "Day 48", 
     "Day 49", "Day 50", "Day 51", "Day 52", "Day 53", "Day 54", "Day 55", "Day 56", 
     "Day 57", "Day 58", "Day 59", "Day 60" }; 
for (int i = 0; i <= label.length - 1; i++) { 
    JCheckBox checkbox = new JCheckBox(label[i]); 
    Day.add(checkbox); 
    // !! scrollPane.setViewportView(checkbox); 
    dayPanel.add(checkbox); // !! 
} 

scrollPane.setViewportView(dayPanel); // !! 

Ein weiteres Problem ist hier:

getContentPane().setLayout(null); 

Während null Layouts und setBounds() könnten wie der einfachste und bester Weg Neulinge zu Swing scheinen komplexen GUIs, desto mehr Swing-GUI ES Ihnen die ernsteren Schwierigkeiten bereiten zu schaffen Sie werden darauf stoßen, wenn Sie sie benutzen. Sie werden die Größe der Komponenten nicht ändern, wenn die Größe der GUI geändert wird. Sie können nur mühsam verbessert oder beibehalten werden. Wenn sie in Scrollpanes platziert werden, sind sie vollständig fehlerhaft und auf allen Plattformen oder Bildschirmauflösungen anders als im Original.

Sie möchten etwas über die Layout-Manager lernen und sie verwenden.