Добавьте JScrollPane на панель, на которой отображается изображение
-
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» непосредственно в разгарный контейнер.