Позвольте мне объяснить проект, который я создаю.Мне нужен список изображений, например, кинопленка, где я могу перетащить изображение из полосы в другую часть программы и что-то с этим делать.Это конечная цель, однако на данный момент я просто иду своим путем.Я создал FilmStripItem, который хранит информацию об изображении и отображает миниатюру изображения.Я пытаюсь создать FilmStripPanel, который представляет собой JScrollPane, который показывает каждую из миниатюр в форме оси Y.
Теперь я новичок в Java Swing и бьюсь головой о стенув течение нескольких недель пытаясь выяснить BorderLayout, BoxLayout, GridLayout и какой из них будет лучше.Кроме того, я не могу заставить их работать так, как я хочу.Ниже приведен код, который я использую (я избавился от ненужных деталей класса).В основном, что происходит, когда я запускаю FilmStripPanel, он сжимает все изображения, чтобы соответствовать размеру окна, и полоса прокрутки не отображается.Как я могу заставить его отображать изображения (80x80) без их сжатия?
FilmStripItem.java
//Removed import info to save space
public class FilmStripItem extends JPanel {
private BufferedImage testImg;
private Image thumbnail;
public FilmStripItem(BufferedImage img) {
this.testImg = img;
this.thumbnail = img.getScaledInstance(80, 80, Image.SCALE_SMOOTH);
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
p.setMinimumSize(new Dimension(80, 80));
add(p);
}
public Image GetThumbnail() {
return this.thumbnail;
}
@Override
public void paintComponent(Graphics g) {
g.drawImage(this.thumbnail, 0, 0, null);
}
public static void main(String[] ARGS) {
try {
//Removed look and layout info
} catch (Exception ex) {
Logger.getLogger("Demo").log(Level.WARNING,
"loading CuiLookAndFeel failed", ex);
}
JFrame f = new JFrame("FilmStripItem");
final FilmStripItem fi = new FilmStripItem();
f.setContentPane(fi);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBounds(10, 10, 128, 128);
f.setVisible(true);
}
}
FilmStripPanel.java
//import info removed to save space
public class FilmStripPanel extends JPanel {
private static final int ITEM_COUNT = 15;
private ArrayList<FilmStripItem> filmItems;
public FilmStripPanel() {
JPanel p = new JPanel(new GridLayout(0, 1));
setLayout(new GridLayout(1, 1));
filmItems = new ArrayList<FilmStripItem>();
JComponent[] c = new JComponent[ITEM_COUNT];
for (int i = 0; i < ITEM_COUNT; i++) {
FilmStripItem item = new FilmStripItem();
filmItems.add(item);
c[i] = item;
p.add(c[i]);
}
JScrollPane sp = new JScrollPane(p, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(sp);
}
public static void main(String[] args) {
try {
//Removed look and feel info
} catch (Exception ex) {
Logger.getLogger("Demo").log(Level.WARNING,
"loading CuiLookAndFeel failed", ex);
}
JFrame f = new JFrame("FilmStrip");
final FilmStripPanel p = new FilmStripPanel();
f.setContentPane(p);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBounds(10, 10, 128, 512);
f.setVisible(true);
}
}
Я гуглил дляэто снова и снова, но я не могу понять это для моей точной проблемы.Я уверен, что здесь есть какой-то избыточный код, и не стесняйтесь указывать на него.Я мог бы использовать всю помощь, которую вы, ребята, могли бы предложить, а также любую критику, я пытаюсь изучить Java Swing для работы, и у меня не получается.