2016-11-07 22 views
1

I want to make JCheckBox List to use arraylist into this left side JScrollPane.しかし、このJScrollPaneは最後のインデックスJCheckBoxを貼り付けて追加するだけです。どんな瞬間でも、私はこの問題を解決できません。 JListを追加しますか?私はできるだけ早くこれを解決したい。ここに私のコードがあります。JScrollPaneを使用するようにJCheckBoxを設定するにはどうすればよいですか?

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

答えて

2

forループでは、スクロールペインのビューポートビューを最後のJCheckBoxに設定していますが、これは唯一表示されます。スクロールペイン内に表示されているすべてのJCheckBoxが必要な場合は、forループの前にJPanelを作成し、GridLayoutを与え、forループ内のこの単一のJPanelにJCheckBoxを追加します。その後、JPanelをJScrollPaneのビューポートビューに追加します。

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); // !! 

もう一つの問題はここにある:

getContentPane().setLayout(null); 

ヌルレイアウトやsetBounds()は複雑なGUI年代を作成するための最も簡単で最良の方法のような初心者スイングするように見えるかもしれませんが、より多くのスイングGUI'Sあなたはより深刻な困難を作成しますあなたはそれらを使用するときに実行されます。 GUIがサイズ変更されたときにコンポーネントのサイズを変更することはありません。スクロールペインに配置すると完全に機能しなくなります。

あなたはレイアウトマネージャーについて学び、それらを使用したいと思うでしょう。

関連する問題