2015-07-25 4 views
1

У меня проблема с вложенными JPanel и JScrollPane. Мой макет таков:Вложенная панель с JScrollPane

JPanelMigLayout, содержащий ячейки 8x8. В первом столбце каждая ячейка имеет JButton, а в последнем столбце каждая ячейка содержит кнопки. Между этой колонкой у меня есть вложенная панель, охватывающая остальные ячейки.

Вот как это выглядит.

GUI layout

Я хотел бы добавить JScrollPane к центральной панели, так что я могу добавить дополнительные кнопки на нем и свитке. Однако, как только я добавляю панель прокрутки, моя центральная панель либо опускается ниже всего, либо просто исчезает.

enter image description here

Это мой код:

package test; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Toolkit; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import net.miginfocom.swing.MigLayout; 
public class test extends JFrame{ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      test frame = new test(); 
      frame.setResizable(true); // ovo zakomentiraj ako hoces full screen 
      frame.setVisible(true); 
     } 
    });  
} 
public test() { 
    JPanel panel = new JPanel(new MigLayout("debug, insets 0", "", "[]0[]")); 
    JPanel central_panel = new JPanel(); 
    JPanel title_panel = new JPanel(); 
    JScrollPane central_scroll_panel = new JScrollPane(); 


    JButton left_but1 = new JButton(); 
    JButton left_but2 = new JButton(); 
    JButton left_but3 = new JButton(); 
    JButton left_but4 = new JButton(); 
    JButton left_but5 = new JButton(); 
    JButton left_but6 = new JButton(); 
    JButton left_but7 = new JButton(); 
    JButton right_but1 = new JButton(); 
    JButton right_but2 = new JButton(); 
    JButton right_but3 = new JButton(); 
    JButton right_but4 = new JButton(); 
    JButton right_but5 = new JButton(); 
    JButton right_but6 = new JButton(); 
    JButton right_but7 = new JButton(); 

    panel.add(left_but1,"cell 0 2, gapy 10"); 
    panel.add(left_but2,"cell 0 3, gapy 10"); 
    panel.add(left_but3,"cell 0 4, gapy 10"); 
    panel.add(left_but4,"cell 0 5, gapy 10"); 
    panel.add(left_but5,"cell 0 6, gapy 10"); 
    panel.add(left_but6,"cell 0 7, gapy 10"); 
    panel.add(left_but7,"cell 0 8, gapy 10"); 
    panel.add(right_but1,"cell 2 2, align right, gapy 10"); 
    panel.add(right_but2,"cell 2 3, align right, gapy 10"); 
    panel.add(right_but3,"cell 2 4, align right, gapy 10"); 
    panel.add(right_but4,"cell 2 5, align right, gapy 10"); 
    panel.add(right_but5,"cell 2 6, align right, gapy 10"); 
    panel.add(right_but6,"cell 2 7, align right, gapy 10"); 
    panel.add(right_but7,"cell 2 8, align right, wrap 135"); 

    panel.add(central_panel, "cell 1 2,span 1 8, grow, w 1175, h 552");   // Ako stavis "span 1 7" tada ide do razine gumbica 
    central_panel.setLayout(new MigLayout("debug", 
       "[center,grow]", // Column constraints with default align 
       "[center]0[]")); 

    for (int i=0;i<=1000;i++){ 
     if (i%10==0){ 
      central_panel.add(new JButton(),"wrap"); 
     } 
     else{ 
      central_panel.add(new JButton()); 
     } 
    } 
     central_scroll_panel=new JScrollPane(central_panel); 
     central_scroll_panel.setSize(1175, 500); 
     central_scroll_panel.setViewportView(central_panel); 
     getContentPane().add(central_scroll_panel); 
     central_scroll_panel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 

    setContentPane(panel); 
} 

} 

Что я делаю неправильно?

ответ

0

Проблема заключается в том, что вы создаете JScrollPane и добавляете его в Frame.

JScrollPane central_scroll_panel = new JScrollPane(); 
... 
panel.add(central_panel, "cell 1 2,span 1 8, grow, w 1175, h 552"); 

Вы добавляете кнопки к нему и после этого вы связать новый JScrollPane переменной central_scroll_panel. Таким образом, пустая JScrollPane будет создана и показана в кадре.
Вам нужно объявить JScrollPane один раз и использовать только этот. Как и в приведенном ниже коде:

public class App extends JFrame { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       App frame = new App(); 
       frame.setResizable(true); // ovo zakomentiraj ako hoces full 
              // screen 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public App() { 
     JPanel panel = new JPanel(new MigLayout("debug, insets 0", "", "[]0[]")); 
     JPanel central_panel = new JPanel(); 
     JPanel title_panel = new JPanel(); 
     JScrollPane central_scroll_panel; 

     JButton left_but1 = new JButton(); 
     JButton left_but2 = new JButton(); 
     JButton left_but3 = new JButton(); 
     JButton left_but4 = new JButton(); 
     JButton left_but5 = new JButton(); 
     JButton left_but6 = new JButton(); 
     JButton left_but7 = new JButton(); 
     JButton right_but1 = new JButton(); 
     JButton right_but2 = new JButton(); 
     JButton right_but3 = new JButton(); 
     JButton right_but4 = new JButton(); 
     JButton right_but5 = new JButton(); 
     JButton right_but6 = new JButton(); 
     JButton right_but7 = new JButton(); 

     panel.add(left_but1, "cell 0 2, gapy 10"); 
     panel.add(left_but2, "cell 0 3, gapy 10"); 
     panel.add(left_but3, "cell 0 4, gapy 10"); 
     panel.add(left_but4, "cell 0 5, gapy 10"); 
     panel.add(left_but5, "cell 0 6, gapy 10"); 
     panel.add(left_but6, "cell 0 7, gapy 10"); 
     panel.add(left_but7, "cell 0 8, gapy 10"); 
     panel.add(right_but1, "cell 2 2, align right, gapy 10"); 
     panel.add(right_but2, "cell 2 3, align right, gapy 10"); 
     panel.add(right_but3, "cell 2 4, align right, gapy 10"); 
     panel.add(right_but4, "cell 2 5, align right, gapy 10"); 
     panel.add(right_but5, "cell 2 6, align right, gapy 10"); 
     panel.add(right_but6, "cell 2 7, align right, gapy 10"); 
     panel.add(right_but7, "cell 2 8, align right, wrap 135"); 

     central_panel.setLayout(new MigLayout("debug", "[center,grow]", // Column 
                     // constraints 
                     // with 
                     // default 
                     // align 
       "[center]0[]")); 

     for (int i = 0; i <= 1000; i++) { 
      if (i % 10 == 0) { 
       central_panel.add(new JButton(), "wrap"); 
      } 
      else { 
       central_panel.add(new JButton()); 
      } 
     } 

     central_scroll_panel = new JScrollPane(central_panel); 

     panel.add(central_scroll_panel, "cell 1 2,span 1 8, grow, w 1175, h 552"); // Ako 
     // stavis 
     // "span 1 7" 
     // tada 
     // ide 
     // do 
     // razine 
     // gumbica 

     setContentPane(panel); 
    } 

} 

enter image description here