use*_*879 4 java swing image jframe
我目前正在学习Java,目前我仍然坚持使用.
我一直在寻找一种方法来将图像添加到我的JFrame中.我在网上发现了这个:
ImageIcon image = new ImageIcon("path & name & extension");
JLabel imageLabel = new JLabel(image);
Run Code Online (Sandbox Code Playgroud)
在将其实现到我自己的代码之后,它看起来像这样(这只是相关部分):
class Game1 extends JFrame
{
public static Display f = new Display();
public Game1()
{
Game1.f.setSize(1000, 750);
Game1.f.setResizable(false);
Game1.f.setVisible(true);
Game1.f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Game1.f.setTitle("Online First Person Shooter");
ImageIcon image = new ImageIcon("C:\\Users\\Meneer\\Pictures\\image.png");
JLabel imageLabel = new JLabel(image);
add(imageLabel);
}
}
class Display extends JFrame
{
}
Run Code Online (Sandbox Code Playgroud)
运行此代码时,它不会给我任何错误,但它也不显示图片.我看到了一些问题和人们有同样的问题,但他们的代码与我的完全不同,他们使用其他方式来显示图像.
JFrame
实例Game
JFrame
:setVisible(flag)
从构造函数调用不是更可取的.而是JFrame
从外部初始化你的setVisible(true)
内部事件调度线程来维护Swing的GUI渲染规则SwingUtilities.invokeLater(Runnable)
setSize(Dimension)
的JFrame
.而是在组件中使用适当的布局,pack()
在将所有相关组件添加到组件后调用JFrame
.JScrollPane
以JLabel
获得更好的用户体验,图像大于标签的大小即可.所有上述描述均在以下示例中进行:
class Game1 extends JFrame
{
public Game1()
{
// setSize(1000, 750); <---- do not do it
// setResizable(false); <----- do not do it either, unless any good reason
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Online First Person Shooter");
ImageIcon image = new ImageIcon("C:\\Users\\Meneer\\Pictures\\image.png");
JLabel label = new JLabel(image);
JScrollPane scrollPane = new JScrollPane(label);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
add(scrollPane, BorderLayout.CENTER);
pack();
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Game1().setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
创建后执行此操作Jlabel
imageLabel.setBounds(10, 10, 400, 400);
imageLabel.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
还将布局设置为 JFrame
Game.f.setLayout(new FlowLayout);
Run Code Online (Sandbox Code Playgroud)