Добавьте JScrollPane на панель, на которой отображается изображение

StackOverflow https://stackoverflow.com/questions/1689850

  •  18-09-2019
  •  | 
  •  

Вопрос

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

класс, который расширяет 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);


}

так в чем же ошибка, которую я здесь допустил?

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top