2016-11-07 54 views
1

I want to make JCheckBox List to use arraylist into this left side JScrollPane.但是,這個JScrollPane只是粘貼並添加最後一個索引JCheckBox。任何時候只是不要讓我解決這個問題。我添加JList?我想盡快解決這個問題。這是我的代碼。如何設置JCheckBox使用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); 
    } 
} 

回答

2

在你的循環,你設置你的滾動窗格的視景到最後JCheckBox的,這將是見過的唯一一個。如果你想要在scrollpane中看到所有JCheckBox,那麼在for循環之前創建一個JPanel,給它一個GridLayout,並將你的JCheckBox添加到for循環中的單個JPanel。然後將該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()似乎爲Swing像最簡單的和最好的方式新手創建複雜的圖形用戶界面的,更多的Swing GUI的是你創造更嚴重的困難你會在使用它們時遇到。它們在GUI大小調整時不會調整組件的大小,它們很難增強或維護,當它們放置在滾動窗格中時它們會完全失敗,在所有平臺或屏幕分辨率與原始窗口不同時,它們看起來都很糟糕。

您將需要了解佈局管理器並使用它們。

相關問題