Java 将jpanel从方法添加到jframe
在我的项目中,我有一些课程。一个类来创建gui,JFrame除外。 我将在我的主类中创建JFrame,例如:Java 将jpanel从方法添加到jframe,java,swing,jframe,return,jpanel,Java,Swing,Jframe,Return,Jpanel,在我的项目中,我有一些课程。一个类来创建gui,JFrame除外。 我将在我的主类中创建JFrame,例如: import javax.swing.*; import java.awt.*; public class KodeHusker { public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable(){ @Override
import javax.swing.*;
import java.awt.*;
public class KodeHusker {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
JFrame f = new JFrame();
f.setLayout(new FlowLayout());
f.add(new JLabel("test"));
f.add(new GUI().viewProgram());//it works fine, when i remove this
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}
gui类是我创建所有gui的地方,viewProgram方法声明为:
public JPanel viewProgram(){}
返回一个JPanel
正如代码中的注释所示,当我删除该行时,一切正常,但当我有它时,JFrame永远不会显示,尽管没有任何异常。关闭程序的快捷方式也不起作用
谁知道我做错了什么?
感谢您的建议。以下是jPanel的外观,不确定(可以看到您的代码吗?)
您可能向我们显示了错误的代码,因为我敢打赌问题出在viewProgram()或GUI的构造函数中。我怀疑您在那里有一个无限循环,或者以其他方式在Swing事件线程(也称为EDT或事件调度线程)上运行。顺便说一句,我喜欢您试图避免不必要地扩展Swing GUI组件。这是一件值得努力的事情。检查是否有空的异常处理程序。@hoverCraftFullOfels,是的,你是对的。仔细查看后,我在viewProgram()中发现了一个没有结尾的while语句。很好。即使是瞎松鼠也会时不时地找到坚果。很高兴你把它修好了!
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class JPanelExt extends JPanel implements Runnable {
private int xCoor = 50;
private boolean moving = false;
public JPanelExt() {
//Thread
thread = new Thread (this); //
thread.start(); }
public void paintComponent (Graphics g)
{
super.paintComponent(g);
g.drawString("DVC 10.0",xCoor,30);
g.drawRect(50, 50, 200,100);
g.drawOval(50,50,200,100);
}
@Override
public void run() {
while (true)
{
if (moving==true)
{
this.xCoor = this.xCoor+10;
if (xCoor > this.getWidth())
{
xCoor = 0;
}
this.repaint();
}
try {
Thread.sleep(50);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
public void setMoving(boolean moving)
{
this.moving = moving;
}
}