2009-11-06 3 views
3

У меня есть эта маленькая программа для показа изображений на apanel .. но я не в состоянии добавить свиток к нему .. и это мой кодДобавить JScrollPane на панель, которая показывает изображение

класс, расширяет JPanel, чтобы показать изображение:

public class ShowPanel extends JPanel{ 

public ShowPanel(BufferedImage image, int height, int width) { 
    this.image = image; 
    this.height = height; 
    this.width = width; 
    //this.setBounds(width, width, width, height); 

} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(image, height, width, null); 
} 

public void setImage(BufferedImage image, int height, int width) { 
    this.image = image; 
    this.height = height; 
    this.width = width; 

} 

private BufferedImage image; 
private int height; 
private int width; 

}

и образец основной рамы, которая имеет другую панель под названием imageContainer провести демонстрационную панель:

public class MainFrame extends javax.swing.JFrame { 

/** Creates new form MainFrame */ 
public MainFrame() { 
    initComponents(); 
    image = null; 
    path = "PantherOnLadder.gif"; 
    image = Actions.loadImage(path); 
    showPanel = new ShowPanel(image, 0, 0); 
    spY = toolBar.getY() + toolBar.getHeight(); 
    showPanel.setBounds(0, spY, image.getWidth(), image.getHeight()); 
    showPanel.repaint(); 
    imageContainer.add(showPanel); 
    JScrollPane scroller = new JScrollPane(imageContainer); 
    scroller.setAutoscrolls(true); 


} 

Так что же я ошибся здесь?

ответ

6

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

Конечно, я никогда не понимаю, почему люди идут на все проблемы, чтобы сделать этот тип пользовательской живописи. Нет необходимости в специальном классе. Просто создайте ImageIcon из BufferedImage, а затем добавьте Icon в JLable, а затем добавьте ярлык в scrollpane, и у вас не будет никаких из этих проблем. Единственная причина делать обычную картину - это если вам нужно масштабировать изображение или придать какой-либо другой эффект.

+0

спасибо .. хорошо, я также сделаю скальниг и атер на картинке – CiCi

+0

, но даже масштабирование можно обработать, просто переопределив метод «paint» на JLabel – aperkins

1

Поскольку «imagecontainer» - это класс, добавляемый в вашу прокручиваемую панель, то есть панель, которая должна превышать определенный размер, чтобы сделать прокручиваемую вещь. Вы должны поместить «showPanel» прямо в опасный контейнер.

+0

так это правильно сделать код следующим образом? Скроллер JScrollPane = новый JScrollPane (showPanel); scroller.setPreferredSize (новый размер (image.getWidth(), image.getHeight())); imageContainer.add (showPanel); , но я все еще не получаю ничего, даже изображение не отображается! – CiCi

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