Я пытаюсь наложить изображения поверх фонового изображения, используя стандартные утилиты java. См. Рисунки ниже ...Java JFrame pack() issue
У меня есть код, который, кажется, создает фоновое изображение (можете ли вы проверить, что он действительно работает?) И я создал расширение JPanel, которое я использую для отображения изображений (класс называемый ImagePanel)
Однако, когда программа запускается, JFrame показывает только второе изображение, которое затем перемещается по мере изменения размера окна.
Я бы хотел, чтобы окно было открыто с фоновым изображением, занимающим всю площадь окна. Затем я хотел бы, чтобы второе изображение отображалось сверху, в том месте, которое я указываю.
import javax.swing.*;
import java.awt.*;
public class ImageTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().setLayout(null);
JPanel backgroundPanel = new JPanel();
ImageIcon backgroundImage = new ImageIcon("C:\\Documents and Settings\\Robert\\Desktop\\ClientServer\\Poker Table Art\\TableAndChairs.png");
JLabel background = new JLabel(backgroundImage);
background.setBounds(0, 0, backgroundImage.getIconWidth(), backgroundImage.getIconHeight());
frame.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
backgroundPanel.setOpaque(false);
frame.setContentPane(backgroundPanel);
ImagePanel button = new ImagePanel("C:\\Documents and Settings\\Robert\\Desktop\\ClientServer\\Poker Table Art\\button.png");
JPanel cardContainer = new JPanel(new FlowLayout());
frame.getContentPane().add(cardContainer);
cardContainer.add(button);
cardContainer.setBounds(100, 600, 200, 200);
frame.pack();
frame.setVisible(true);
}
}
alt text http://img189.imageshack.us/img189/9739/image1qi.jpg
alt text http://img186.imageshack.us/img186/1082/image2ll.jpg
Снова зачем писать собственный код, чтобы нарисовать изображение и рассчитать предпочтительный размер панели? Это делается автоматически JLabel. JLabel - это контейнер, как JPanel. Таким образом, вы можете добавлять компоненты к нему так же легко, как и JPanel, и получаете бонус от фонового изображения. – camickr
@camickr: Согласен.Я никогда не думал установить макет 'JLabel', и я обновил свой пример, чтобы показать, используя« GridLayout ». Вопросник может попробовать попробовать это с помощью StarLayout: http://mindprod.com/jgloss/starlayout.html – trashgod