2012-03-29 60 views
2

我的整個的這個目的是要得到的東西看起來像這樣:添加的JScrollBar到一個JPanel使用GridBagLayout的

IMG http://img221.imageshack.us/img221/1294/jscrollbaruselessf.png

我想我的技能列表中滾動類似於凍結您的電子表格的第一行中的Excel 。

這是我最上面一行的代碼。

//#### Skills frame start #### 
    skillsFrame = new JInternalFrame("Skills", true, true, false, false); 
    skillsFrame.setLayout(new BorderLayout()); 
    skillsFrame.setLocation(Integer.parseInt(configFile.getProperty("SKILLS_FRAME_COORDINATE_X")), 
      Integer.parseInt(configFile.getProperty("SKILLS_FRAME_COORDINATE_Y"))); 
    skillsFrame.setSize(Integer.parseInt(configFile.getProperty("SKILLS_FRAME_SIZE_X")), 
      Integer.parseInt(configFile.getProperty("SKILLS_FRAME_SIZE_Y"))); 
    skillsPanelHeader = new JPanel(); 
    skillsPanelContent = new JPanel(); 
    //skillsPanelScrollPane = new JScrollPane(); 
    //skillsPanelScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
    //skillsPanelScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

    GridBagLayout gridBagLayout = new GridBagLayout(); 
    gridBagLayout.columnWidths = new int[]{0, 110, 200, 45, 17}; 
    gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0}; 
    gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0}; 
    gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; 
    skillsPanelHeader.setLayout(gridBagLayout); 
    skillsPanelContent.setLayout(gridBagLayout); 

    JLabel lblImage = new JLabel("Icon"); 
    lblImage.setFont(new Font("Tahoma", Font.BOLD, 14)); 
    GridBagConstraints gbc_lblImage = new GridBagConstraints(); 
    gbc_lblImage.insets = new Insets(0, 0, 5, 5); 
    gbc_lblImage.gridx = 0; 
    gbc_lblImage.gridy = 0; 
    skillsPanelHeader.add(lblImage, gbc_lblImage); 

    JLabel lblSkills = new JLabel("Skills"); 
    lblSkills.setFont(new Font("Tahoma", Font.BOLD, 14)); 
    GridBagConstraints gbc_lblSkills = new GridBagConstraints(); 
    gbc_lblSkills.gridx = 1; 
    gbc_lblSkills.insets = new Insets(0, 0, 5, 5); 
    gbc_lblSkills.gridy = 0; 
    skillsPanelHeader.add(lblSkills, gbc_lblSkills); 

    JLabel lblExp = new JLabel("Exp"); 
    lblExp.setFont(new Font("Tahoma", Font.BOLD, 14)); 
    GridBagConstraints gbc_lblExp = new GridBagConstraints(); 
    gbc_lblExp.insets = new Insets(0, 0, 5, 5); 
    gbc_lblExp.gridx = 2; 
    gbc_lblExp.gridy = 0; 
    skillsPanelHeader.add(lblExp, gbc_lblExp); 

    JLabel lblLevel = new JLabel("Level"); 
    lblLevel.setFont(new Font("Tahoma", Font.BOLD, 14)); 
    GridBagConstraints gbc_lblLevel = new GridBagConstraints(); 
    gbc_lblLevel.insets = new Insets(0, 0, 5, 0); 
    gbc_lblLevel.gridx = 3; 
    gbc_lblLevel.gridy = 0; 
    skillsPanelHeader.add(lblLevel, gbc_lblLevel); 

    JSeparator separator = new JSeparator(); 
    GridBagConstraints gbc_separator = new GridBagConstraints(); 
    gbc_separator.fill = GridBagConstraints.HORIZONTAL; 
    gbc_separator.gridwidth = 4; 
    gbc_separator.insets = new Insets(0, 0, 5, 0); 
    gbc_separator.gridx = 0; 
    gbc_separator.gridy = 1; 
    skillsPanelHeader.add(separator, gbc_separator); 

    skillsFrame.setMinimumSize(new Dimension(425,500)); 
    skillsFrame.setVisible(false); 
    skillsFrame.getContentPane().add(skillsPanelHeader, BorderLayout.NORTH); 
    panel.add(skillsFrame); 
    //#### Skills frame end #### 

這裏是解析的代碼(CommandString中 - 技能從服務器/回覆DB)

String SkillsList[] = commandString.split("\\|"); 
//TODO:: make the painting not keep getting darker and darker 
for (int i = 0; i < SkillsList.length; i = i+3){ 
    JLabel label = new JLabel(""); 
    label.setIcon(new ImageIcon(SkillsList[i])); 
    GridBagConstraints gbc_label = new GridBagConstraints(); 
    gbc_label.insets = new Insets(0, 0, 5, 5); 
    gbc_label.gridx = 0; 
    gbc_label.gridy = i+2; 
    skillsPanelContent.add(label, gbc_label); 

    JLabel lblNewLabel = new JLabel(SkillsList[i+1]); 
    GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); 
    gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5); 
    gbc_lblNewLabel.gridx = 1; 
    gbc_lblNewLabel.gridy = i+2; 
    skillsPanelContent.add(lblNewLabel, gbc_lblNewLabel); 

    JProgressBar progressBar_1 = new JProgressBar(); 
    progressBar_1.setStringPainted(true); 
    progressBar_1.setString(SkillsList[i+2] + "/"); 
    GridBagConstraints gbc_progressBar_1 = new GridBagConstraints(); 
    gbc_progressBar_1.fill = GridBagConstraints.HORIZONTAL; 
    gbc_progressBar_1.insets = new Insets(0, 0, 5, 5); 
    gbc_progressBar_1.gridx = 2; 
    gbc_progressBar_1.gridy = i+2; 
    skillsPanelContent.add(progressBar_1, gbc_progressBar_1); 

    JLabel label_1 = new JLabel("1"); 
    GridBagConstraints gbc_label_1 = new GridBagConstraints(); 
    gbc_label_1.insets = new Insets(0, 0, 5, 0); 
    gbc_label_1.gridx = 3; 
    gbc_label_1.gridy = i+2; 
    skillsPanelContent.add(label_1, gbc_label_1); 

    if (i == SkillsList.length-3){ 
      JScrollBar scrollbar = new JScrollBar(); 
      GridBagConstraints gbc_scrollbar = new GridBagConstraints(); 
      gbc_scrollbar.insets = new Insets(0, 0, 5, 0); 
      gbc_scrollbar.gridx = 4; 
      gbc_scrollbar.gridy = 2; 
      gbc_scrollbar.fill = GridBagConstraints.BOTH; 
      gbc_scrollbar.gridheight = i; 
      skillsPanelContent.add(scrollbar, gbc_scrollbar); 
    } 
} 
skillsFrame.getContentPane().add(skillsPanelContent, BorderLayout.CENTER); 
System.out.println(commandString); 

正如你可以看到它增加了這一切完美,但scrollbbar不掛接任何事情。我憑我的智慧結束了這一切。我嘗試使用JScrollPane添加skillsPanelContent,並且無論我做了什麼,它都不會顯示出來。

任何意見或幫助將非常讚賞。我希望我保持這個短(代碼)如有必要。如果我能包含任何其他內容以獲得更多幫助,請讓我來。謝謝。

+0

我有一個問題,我正在尋找相同的佈局,你在你的照片,但不能讓你的代碼工作。 – 2015-11-17 12:27:24

+0

我的代碼對我的應用程序高度自定義 - 它不是SSCCE。你有什麼嘗試,你有什麼問題? – KisnardOnline 2015-11-17 17:19:46

回答

4

爲什麼不加JScrollPane在你的ContentPanel:

skillsFrame.getContentPane().add(new JScrollPane(skillsPanelContent), BorderLayout.CENTER); 

當然刪除您的滾動條。您可能還需要將其設置到ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER值禁用horizo​​ntalScrollBarPolicy:setHorizontalScrollBarPolicy(int policy)

+2

你是我的翅膀下面的風...我試圖做到這一點,但當我添加skillsPanelScrollPane.add(skillsPanelContent);它顯示空白,它使我瘋狂。不知道爲什麼它沒有這樣工作,但我很高興它的方式。非常感謝!!! – KisnardOnline 2012-03-29 22:24:07

1

要獲得頭永遠留在你需要拉出頭,並把它們無論是在一個單獨的組件或在上邊框。然後將剩餘的日期放在JPanel中,然後執行JScr​​ollPane myScroller = new JScrollPane(myPanel),然後將horizo​​ntalscrollbarpolicy設置爲從不。

將標題與列內聯保留可能有點棘手,但我建議嘗試擴展邊界並引用GridBagLayout中的列位置。

相關問題