import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
private Image image = null;
public ImagePanel(String filename) {
this.image = new ImageIcon(filename).getImage();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, image.getWidth(null), image.getHeight(null), null);
}
}
public ClientGUI() throws IOException {
instance = this;
this.setPreferredSize(new Dimension(400, 400));
this.setResizable(false);
this.setTitle("ScanIt");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout(FlowLayout.CENTER));
ImagePanel panel = new ImagePanel("C:\\barcode_background.jpg");
BoxLayout boxLayout = new BoxLayout(panel, BoxLayout.Y_AXIS);
panel.setLayout(boxLayout);
panel.add(Box.createVerticalStrut(30));
JLabel lblLogo = new JLabel("Scan-It");
lblLogo.setOpaque(true);
lblLogo.setFont(new Font("Tahoma", Font.BOLD, 48));
panel.add(lblLogo);
panel.add(Box.createVerticalStrut(50));
JLabel lblEnter = new JLabel("הכנס ברקוד");
lblEnter.setOpaque(true);
lblEnter.setFont(new Font("Tahoma", Font.BOLD, 24));
panel.add(lblEnter);
textField = new JTextField(20);
panel.add(textField);
JButton btnSearch = new JButton("חפש מוצר");
btnSearch.addActionListener(new SearchButtonListener());
panel.add(btnSearch);
panel.add(Box.createVerticalStrut(30));
JButton btnAdmin = new JButton("הוסף מוצר");
btnAdmin.addActionListener(new AdminButtonListener());
panel.add(btnAdmin);
this.add(panel, BorderLayout.CENTER);
this.pack();
this.setVisible(true);
}
由于某些原因,ImagePanel的大小与JFrame的大小不相同(如这里所示:http://prntscr.com/l8d98i)。当我将ImagePanel的大小设置为JFrame的大小时,我的组件都会调整大小。这是为什么?如图所示:http://prntscr.com/l8d9ka
panel.setPreferredSize(this.getPreferredSize());
由于某些原因,ImagePanel的大小与JFrame的大小不相同
那么,您不应该设置框架的大小。
所有Swing组件都负责确定自己的大小。因此,您应该将所有组件添加到框架中,然后使用:
frame.pack();
frame.setVisible( true );
this.setPreferredSize(new Dimension(400, 400));
panel.setPreferredSize(this.getPreferredSize());
实际上,只有JTextField可以调整大小。由于某种奇怪的原因,JTextField的“最大高度”是无限的。对于JLabel和JButton,最大高度是首选高度。
如T67所述,BoxLayout将调整组件的大小,使其达到最大大小。虽然,如果你按照我上面的建议去做,就不用担心这个了。这将是一个问题,只有在未来的应用程序时,帧的大小是可调整的。
我正在使用一个覆盖paintComponent的自定义类来使用ImageIcon
问题内容: 如何设置JFrame的背景颜色? 问题答案: 检索框架的内容窗格,并使用从继承的方法更改颜色。 例:
问题内容: 有什么方法可以将图像设置为背景JFrame? 问题答案: 没有内置方法,但是有几种方法可以实现。目前我能想到的最直接的方法是: 创建的子类。 重写绘制想要显示的图像的方法。 设置内容窗格的是这个子类。 一些示例代码: 请注意,如果你要使用此代码,则不会处理调整图像大小以适合的大小。
除了背景背景平铺外,CSS还提供了另一个强大的功能,即背景定位技术,能够精确控制背景在对象中的位置。 默认情况下,背景图像都是从元素 padding 区域的左上角开始出现的,但设计师往往希望背景能够出现在任何位置。通过 background-position属性,可以很轻松的控制背景图像在对象的背景区域中的起始显示位置。其语法格式为: background-position: xpos ypos
问题内容: 我学习Java已有几周了,在将背景图像应用于JFrame时,我真的很困惑。我遇到的每个教程都不像我那样创建Frames(我扩展了JFrame),或者如果这样做,说明还不够清楚,我无法理解。 下面的代码来自我自己的项目,因此可以帮助我练习到目前为止所学的内容。请您能否以下面的代码为基础,并向我说明要添加的内容和位置,所以我可能以图像作为框架的背景? 我真正要感谢的一件事是,如果您能解释事
我刚开始尝试创建java接口,我想创建一个作为大学项目的一部分。 就像我说的,我是一个新手,所以我知道它可能非常简单,或者我没有把它搞砸,但如果有人能帮助它,它将会非常接近。
我想为我的jFrame设置一个背景,我正在使用下面的代码: 当我执行它时,在系统输出中我有5个“完成”。所以这意味着所有任务都已执行。我不明白错误在哪里。请帮帮我!