这里的情况如下:我有一个JFrame,我存储了一个图像列表。按下右键时,我会在此全屏JFrame中显示下一个图像。我想在屏幕的右上角有一个退出JButton,这就是问题所在。为了实现这一点,我每次更改图像时都会创建一个新的JPanel,从框架中删除旧的JPanel,并将JButton添加到新的JPanel中。问题如下:当我启动程序时,JButton位于JFrame的中间。一旦我按下右键加载下一个图像,JButton就在正确的位置。但是,调用方法显示下一个图像的变通方法失败。即使我将JButton设置为不可见,直到按下右键并加载第二个图像,它仍然位于屏幕的中心而不是右上角。使用以下代码:
BufferedImage image = ImageIO.read(images.get(number));
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
};
if (currentPanel != null) {
this.remove(currentPanel);
}
panel.setSize(Gallery.this.getSize());
currentPanel = this.add(panel);
jButton1.setBounds(Gallery.this.getWidth() - jButton1.getWidth(), 0, jButton1.getWidth(), jButton1.getHeight());
panel.add(jButton1);
currentPanel.repaint();
此代码在启动时执行一次。那时JButton就在中间。 加载下一个图像时再次执行,现在JButton处于正确的位置。
我已经尝试了很多东西,比如将JButton添加到JFrame,将JPanels布局设置为null(使按钮不可见),重绘,打包,无效,我尝试的任何东西似乎都无效。是否有人能够指示Swing将JButton放在我的JFrame的右上角?非常感谢你!
答案 0 :(得分:0)
清理完我在那里编程的烂摊子后,一个简单的解决方案证明可行: 我在启动时向JFrame添加了一个自定义JPanel,并为JButton设置了固定宽度。在这里JPanel:
public class ImagePanel extends javax.swing.JPanel {
Image image;
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
public ImagePanel() {
initComponents();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}
我为JButton设置了固定宽度并将其添加到JPanel:
jButton1 = new JButton();
jButton1.setText("Exit");
imagePanel = new ImagePanel();
imagePanel.setSize(Gallery.this.getSize());
add(imagePanel);
imagePanel.add(jButton1);
jButton1.setBounds(Gallery.this.getWidth() - 50, 0, 50, 30);
jButton1.addActionListener((ActionEvent e) -> exit());
displayImage(0);
displayImage方法由以下几行组成:
BufferedImage image = ImageIO.read(images.get(number));
imagePanel.setImage(image);
imagePanel.repaint();