2012-03-29 13 views
2

Mein ganzer Zweck ist, etwas zu bekommen, wie folgt aussehen:Zugabe JScrollBar zu einem JPanel mit GridBagLayout

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

ich die oberste Zeile Ihrer Tabelle Einfrieren in Excel-ähnlichen Blättern meine Fähigkeiten Liste wollen .

Hier ist der Code für meine obere Reihe.

//#### 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 #### 

Und hier ist der Code zum Parsen der (befehls - Antwort von Fähigkeiten von Server/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); 

Wie Sie es fügt alles perfekt sehen können, aber die scrollbbar nicht angeschlossen ist zu irgendetwas. Damit bin ich am Ende. Ich habe versucht, ein JScrollPane zu verwenden, indem ich skillsPanelContent dazu fügte, und es wurde nicht angezeigt, egal was ich tat.

Jeder Rat oder Hilfe wäre soooo sehr geschätzt. Ich hoffe, ich habe dies so kurz (code) wie nötig gehalten. Bitte lassen Sie mich, wenn ich etwas anderes hinzufügen kann, um mehr Hilfe zu sein. Vielen Dank.

+0

Ich habe eine Frage, ich bin auf der Suche nach dem gleichen Layout, das Sie in Ihrem Bild gemacht haben, aber nicht Ihren Code zum arbeiten bekommen. –

+0

Mein Code ist stark an meine Anwendung angepasst - es ist nicht SSCCE. Was hast du probiert und womit hast du Probleme? – KisnardOnline

Antwort

4

Warum ein JScrollPane um Ihren Content nicht hinzufügen:

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

Und natürlich Ihre Scrollbar entfernen. Sie können auch horizontalScrollBarPolicy deaktivieren müssen, indem sie es auf den ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER Wert einstellen: setHorizontalScrollBarPolicy(int policy)

+2

du bist der Wind unter meinen Flügeln ... ich habe versucht, das seperat zu tun, aber wenn ich SkillsPanelScrollPane.add (skillsPanelContent) hinzugefügt habe; es zeigte sich leer und es hat mich verrückt gemacht. Nicht sicher, warum es so nicht funktioniert hat, aber ich bin so glücklich, dass es auf deine Art funktioniert. Vielen Dank!!! – KisnardOnline

1

der Header Um zu immer oben bleiben Sie die Header und sie herausziehen müssen setzen entweder in einem separaten Bauteil oder in einer Grenze. Dann lege den Rest des Datums in ein JPanel und mache JScrollPane myScroller = new JScrollPane (myPanel) und setze dann die horizontalscrollbarpolicy auf NEVER.

Es mag ein wenig schwierig sein, die Header in die Spalten einzufügen, aber ich empfehle, eine Erweiterung von Border zu machen und das GridBagLayout für Spaltenpositionen zu referenzieren.