2017-01-19 2 views
0

Я хочу, чтобы сложить несколько JPanels друг на друг, чтобы прокручивать в JScrollPaneStack JButtons друг на друг в JScrollPane

enter image description here

Я попытался это:

JFrame:

setLayout(new BorderLayout()); 

JPanel boxListPanel = new JPanel(); 
     boxListPanel.setLayout(new BoxLayout(boxListPanel,BoxLayout.Y_AXIS)); 

boxListPanel.add(boxp1); 
boxListPanel.add(boxp2); 
boxListPanel.add(boxp3); 

JScrollPane jscollPane = new JScrollPane(boxListPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

add(jscollPane, BorderLayout.CENTER); 

Но JButtons являются натяжные, как это:

enter image description here

Когда я использую FlowLayout, то JButtons aren't натянута, но они упорядочены горизонтально.

РЕШЕНИЕ 1:

DefaultListModel model = new DefaultListModel(); 

box = new Box(); 
model.addElement(boxp); 
box = new Box(); 
model.addElement(boxp); 
box = new Box(); 
model.addElement(boxp); 

JList<Box> boxes = new JList<>(model); 
     boxes.setCellRenderer(new PanelRenderer()); 

JScrollPane jscollPane = new JScrollPane(boxes, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

jscollPane.setBounds(0, 0, 395, 600); 
add(jscollPane); 


class PanelRenderer implements ListCellRenderer { 

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     JButton renderer = (JButton) value; 
//   renderer.setBackground(isSelected ? Color.red : list.getBackground()); 
     renderer.setBackground(list.getBackground()); 
     return renderer; 
    } 
} 

РЕШЕНИЕ 2:

setLayout(null); 

int y_achis = 5; 
     int x_achis = 5; 
     int c_with = 380; 
     int c_height = 65; 
     int c_padding = 5; 

... 
box = new Box(); 
box.setBounds(x_achis, y_achis, c_with, c_height); 
add(box) 
y_achis += c_height + c_padding; 

box = new Box(); 
box.setBounds(x_achis, y_achis, c_with, c_height); 
add(box) 
y_achis += c_height + c_padding; 

ответ

0

Попробуйте установить расположение рамы в absolutLayout!

+0

В Java нет AbsolutLayout? Без макета для JFrame это тот же результат. – user2784676

+0

вы можете использовать этот импорт com.google.gwt.user.client.ui.AbsolutePanel; –

+0

Хорошо, но возможно ли это с ~ 16MB lib? Мое приложение имеет ~ 1,7 МБ – user2784676

Смежные вопросы