为什么我的JFrame什么都不显示? import java.awt.*; 导入java.awt.event.*; 导入javax.swing.ImageIcon; 导入javax.swing.JFrame; 导入javax.swing.JPanel; 公共类MAIN_文件扩展JPanel实现ActionListener { 公共组件(图形g) { int行=0; int col=0; int x,y; int colMax=29; int rowMax=41; 超级组件(g); ImageIcon地面=新的ImageIcon(“C:\\Programming\\ground.jpg”); 对于(col=0;col
一旦调用为什么我的JFrame什么都不显示? import java.awt.*; 导入java.awt.event.*; 导入javax.swing.ImageIcon; 导入javax.swing.JFrame; 导入javax.swing.JPanel; 公共类MAIN_文件扩展JPanel实现ActionListener { 公共组件(图形g) { int行=0; int col=0; int x,y; int colMax=29; int rowMax=41; 超级组件(g); ImageIcon地面=新的ImageIcon(“C:\\Programming\\ground.jpg”); 对于(col=0;col,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,一旦调用jf.setVisible(true),事件调度线程将被锁定,等待事件发生 对jf.add(JP)的调用直到窗口被处理之后才会发生 尝试重新排序main中的操作,首先将JPanel添加到JFrame,然后将setVisible(true)添加JPanel后,需要调用revalidate()并在JFrame上重新绘制() import java.awt.*; import java.awt.event.*; import javax.swing.ImageIcon; import jav
jf.setVisible(true)
,事件调度线程将被锁定,等待事件发生
对jf.add(JP)
的调用直到窗口被处理之后才会发生
尝试重新排序main中的操作,首先将
JPanel
添加到JFrame
,然后将setVisible(true)
添加JPanel
后,需要调用revalidate()
并在JFrame
上重新绘制()
import java.awt.*;
import java.awt.event.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MAIN_FILE extends JPanel implements ActionListener
{
public void paintComponent(Graphics g)
{
int row = 0;
int col = 0;
int x, y;
int colMax = 29;
int rowMax = 41;
super.paintComponent(g);
ImageIcon ground = new ImageIcon("C:\\Programming\\Ground.jpg");
for(col = 0; col <= colMax; col++)
{
for(row = 0; row <= rowMax; row++)
{
x = row * 30;
y = col * 30;
ground.paintIcon(this, g, x, y);
}
}
ImageIcon wall = new ImageIcon("C:\\Programming\\WallTest0000.jpg");
}
public static void main(String[] args)
{
JPanel JP = new JPanel();
JP.setVisible(true);
JFrame jf = new JFrame();
jf.setTitle("Dungeon Thing");
jf.setSize(1230, 870);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(JP);
}
注意,如果在调用setVisible
之前如David所说将组件添加到帧中,则不需要revalidate()
或repaint()
:
我注意到
main()
到部署时,这些资源很可能会成为一个。在这种情况下,必须通过URL
而不是文件来访问资源。请参阅标签,以了解形成URL
的方法。此外,我们不应该尝试在绘制方法中加载图像。它们应该在启动和运行时加载缓存为类属性。这是不真实的。public static void main(String[]args){JFrame frame=new JFrame();frame.setSize(300300);frame.setLocationRelativeTo(null);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);System.out.println(“此处”)}
和另一个:公共静态void main(String[]args){JFrame frame=new JFrame();frame.setSize(300300);frame.setLocationRelativeTo(null);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.add(new JLabel(“标签”);frame.revalidate();frame.repaint();}
@TAsk此答案第一段中的语句仅适用于模式窗口,如模式对话框或选项窗格。由于该错误,其余部分是错误的。frame.setLocationRelativeTo(null);
对于框架定位,您不能使用setLocationByPlatform(true)
。请参阅演示。frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
最好使用JFrame.DISPOSE_ON_CLOSE
。+1否则。或者,如果可能,调用setVisible
lastOP,调用EXIT_ON_CLOSE
,但不调用任何帧定位,所以我应该忽略它。
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(300,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JLabel("Label"));
frame.revalidate();
frame.repaint();
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.add(new JLabel("Label"));
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}