2012-06-20 3 views
1

Может кто-то решить, почему мой JScrollPane не работает. Возможно, что-то я, возможно, пропустил. Я понимаю, что это может быть глупо, без контекста, чем то, что я показал, но, пожалуйста, спросите, и я буду рад предоставить больше.Почему мой JScrollPane не работает?

public ApplicationFrame(String title, int x, int y, int width, int height) { 
     // Constructor for the ApplicationFrame, no implicit Construc. 
     setTitle(title); 
     setResizable(true); 
     setBounds(x, y, width, height); 
        setLayout(new BorderLayout()); 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
     setIconImage(new ImageIcon(getClass().getResource("resources/topLeft.png")).getImage()); 
     topMostMenuBar = new TopMenuBar(this); 
     setJMenuBar(topMostMenuBar.getMyJMenuBar()); 
     paneEdge = BorderFactory.createLineBorder(Color.gray); 
     blackline = BorderFactory.createLineBorder(Color.black); 
     this.frameContent = new ApplicationPanel() { 
      //@Override 
      protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       g.drawImage(TI, 0, 0, null); 
      } 
     }; 
     mainImageScrollPane = new JScrollPane(frameContent); 
     statusPanel = new ApplicationPanel(new Color(0xfff0f0f0)); 
     leftPanel = new ApplicationPanel(new Color(0xfff0f0f0)); 
     testPanel = new ColorPanel(new Color(0xfff0f0f0)); 
     testPanel.setPreferredSize(new Dimension(50,300)); 
     add(mainImageScrollPane, BorderLayout.CENTER); 
     add(statusPanel, BorderLayout.SOUTH); 
     add(leftPanel, BorderLayout.WEST); 
     Container visibleArea = getContentPane(); 
     visibleArea.add(frameContent); 
     setVisible(true); 
     do { 
      loadImageIn(); 
     } while (!initLoadSuccess); 
     initButtons(); 
     leftPanel.add(testPanel, BorderLayout.SOUTH); 
    } // end Constructor ** 

Это большой кусок кода, поэтому я не уверен, как сделать из него SSCCE. То, что вы ищете, является конструктором моего подкласса JFrame, который содержит 3 панели. ApplicationPanel на данный момент только JPanel. Метод loadImageIn() открывает filechooser, а затем загружает выбранное изображение, которое раскрашено на frameContent. Изображение отображается отлично, все работает, за исключением случаев, когда я изменяю размер окна, нет полос прокрутки.

+0

Для лучшей помощи в ближайшее время отправьте сообщение [SSCCE] (http://sscce.org/). –

ответ

2

У вас есть эта линия, которая добавляет ApplicationPanel к visibleArea ...

visibleArea.add(frameContent); 

Может быть, вы на самом деле означает это, что добавляет JScrollPane к visibleAreaJScrollPane уже содержит ApplicationPanel) ...

visibleArea.add(mainImageScrollPane); 

Когда вы вызываете new JScrollPane(frameContent), он ничего не делает для панели внутри него, он просто добавляет обертку снаружи. Итак, если вы хотите прокручивать, вам нужно обратиться к обертке JScrollPane, а не к самой панели.

+0

Привет, вот и все. Я должен был выйти, так как это вызывало у меня головную боль. В следующий раз я обязательно буду решать, как уменьшить мою проблему до SSCCE. Еще раз спасибо. – yoonsi

+0

Нет проблем :-) рада помочь. FYI, я думаю, что вы хорошо справились со своим кодом SSCCE - это была хорошая длина и показали весь контент, необходимый для решения проблемы. – wattostudios

0

Вы не указали размер для вашего frameContent. Это намеренно?

Кроме того, ваш frameContent затем добавляется к visibleArea. Значение больше не в mainImageScrollPaneJScrollPane

Может быть, вы хотите нет: visibleArea.add(mainImageScrollPane);, но вам необходимо установить ваш размер панели

0
mainImageScrollPane.setViewportView(<component_to_be_scrollable>); 
Смежные вопросы