2015-11-09 3 views
2

У меня есть список, таблица и группа кнопок. Например. Итак, стол будет в центре и список на BorderLayout.WEST и т. Д.Горизонтальная прокрутка не работает, JList

Я думаю, что я действительно ничего не понимаю, потому что, когда я начинаю простой код ниже, нет горизонтальной полосы прокрутки. Но мне это нужно, когда какой-то элемент в JList виден только частью.

import java.awt.BorderLayout; 
import javax.swing.*; 
public class ListDemo { 

private JFrame frame; 

private JPanel mainPanel; 

public ListDemo() { 

    createPartControl(); 
} 

private void createPartControl() { 
    frame = new JFrame(); 
    frame.setTitle("JList Demo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    createMainPanel(); 

    frame.add(mainPanel); 
    frame.pack(); 
    frame.setLocationByPlatform(true); 
    frame.setVisible(true); 
} 

private void createMainPanel() { 
    mainPanel = new JPanel(); 
    mainPanel.setLayout(new BorderLayout()); 

    String[] words = { "Word1", "Word2", "Word2", "Word4", "Word5", "very long worddddddddddddddd" }; 
    JList<String> list = new JList<>(words); 
    // list.setFixedCellWidth(100); 
    JScrollPane pane = new JScrollPane(list); 
    // pane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    mainPanel.add(pane, BorderLayout.WEST); 

} 

public static void main(String[] args) { 
    new ListDemo(); 
}} 

Я пробовал метод фиксированной ширины в JList, но это не работает.

+0

Я думаю, что основная проблема связана с использованием составных панелей - 'JScrollPane' в' mainPane', который помещается в 'contentPane'. Зачем вам нужно столько панелей? Кроме того, добавление 'ScrollPane' в позицию' WEST' любой панели приводит к тому же результату, поэтому я могу быть побочным эффектом того, как «BorderLayout» обрабатывает эти компоненты – MadProgrammer

+0

@MadProgrammer много панелей? Я хочу добавить, например, 'JTable' в' BorderLayout.CENTER' и 'JList' в' WEST'. У меня есть экран, в котором я нуждаюсь. Это 'JTree' в затмении, но когда я изменил ширину этой панели на min, была создана горизонтальная полоса прокрутки http://i.imgur.com/1PxEoeQ.jpg В eclipse кажется, что JTree находится на' WEST' или I'am wrong ? – dimads

+0

Позиция 'WEST' может ТОЛЬКО оценивать предпочтительный размер компонента, он НИКОГДА не может уменьшать размер компонента за пределами этого требования, что означает, что' JScrollPane' никогда не понадобится горизонтальные полосы прокрутки. Возможно, вам повезло с 'GridBagLayout' – MadProgrammer

ответ

0

Вы должны поместить mainPanel в JScrollPane, а перед добавлением к раме:

frame.add(new JScrollPane(mainPanel)); 
+0

Я пробовал, но это не то, что мне нужно. Мне нужно что-то подобное на этом изображении http://i.imgur.com/1PxEoeQ.jpg – dimads

0

Попробуйте добавить ScrollPane к центру панели BorderLayout в:

mainPanel.add(pane, BorderLayout.CENTER); 

Если вам нужно это на западе, используйте вложенные панели.

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