Java 保持图形屏幕
在我的程序中,我有一个从JPanel扩展的类Java 保持图形屏幕,java,swing,Java,Swing,在我的程序中,我有一个从JPanel扩展的类GraphDisplay,用于创建图形。。。在它的构造函数中,我有一个函数display(),它创建了我想要的所有东西,包括一个用于侦听的按钮 在另一个类MainGUI中,我在用户的一个对话框操作之后创建了一个上面类的对象,发生的事情是上面的类对象被创建并在消失之前显示了几分之一秒 有没有一种方法可以让MainGUI在上面的对象上等待输入,而不是关闭 GraphDisplay是这样的 public class GraphDisplay extends
GraphDisplay
,用于创建图形。。。在它的构造函数中,我有一个函数display(),它创建了我想要的所有东西,包括一个用于侦听的按钮
在另一个类MainGUI
中,我在用户的一个对话框操作之后创建了一个上面类的对象,发生的事情是上面的类对象被创建并在消失之前显示了几分之一秒
有没有一种方法可以让MainGUI
在上面的对象上等待输入,而不是关闭
GraphDisplay是这样的
public class GraphDisplay extends JPanel {
private static final long serialVersionUID = 1L;
GraphDisplay(String source , String destination , List<Node> nodes , List<GUIEdge> edges , List<GUIEdge> spanedges)
{
//assigning values
this.display();
}
public void display() {
frame1 = new JFrame();
frame1.setSize(400,400);
frame1.setVisible(true);
frame1.setLayout(new FlowLayout(FlowLayout.LEFT));
frame1.setBackground(Color.lightGray);
frame1.repaint();
JButton next = new JButton("NEXT");
next.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("Hello");
}
});
}
public void paintComponent(Graphics g) {
//does some painting
}
公共类GraphDisplay扩展了JPanel{
私有静态最终长serialVersionUID=1L;
GraphDisplay(字符串源、字符串目标、列表节点、列表边、列表边)
{
//赋值
这个.display();
}
公共空间显示(){
frame1=新的JFrame();
框架1.设置大小(400400);
frame1.setVisible(true);
frame1.setLayout(新的FlowLayout(FlowLayout.LEFT));
框架1.立根背景(颜色:浅灰色);
frame1.repaint();
JButton next=新JButton(“next”);
next.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e)
{
System.out.println(“你好”);
}
});
}
公共组件(图形g){
//他画了一些画
}
谢谢如果你想在
JPanel
上画画,你应该重写paintComponent(Graphics)
方法。每次JPanel需要自己画画时,都会自动调用它
@Override
public paintComponent(Graphics g){
super.paintComponent(g);
g.drawLine(...);
g.drawOval(...);
/*Other stuff*/
}
您正在JPanel中创建JFrame。下面是关于您想要做什么的最基本示例,我认为您可以看到问题:
public class Test extends JFrame{
public static void main(String[] args){
JFrame frame = new JFrame();
MyPanel myPanel = new MyPanel();
frame.add(myPanel);
frame.pack();
frame.setVisible(true);
}
}
class MyPanel extends JPanel{
@Override
public void paintComponent(Graphics g){
g.drawLine(10, 10, 100, 100);
}
}
如果整个程序正在关闭(您的问题不清楚),那么它是由于您调用的某个方法(例如System.exit())而关闭的 MainGUI在创建GraphDisplay后是否执行其他操作?如果是,请记住创建面板不会停止当前的执行流
GraphDisplay完成后关闭程序的一种干净方法是编写listenerInterface(使用单个“I'm Done”方法),使用MainGUI类实现该接口(关闭应用程序)然后将MainGUI类传递给GraphDisplay面板。当用户执行所需操作时,GraphDisplay面板可以调用“I'm Done”。我已经…正如我所说,输出在jpanel上绘制,但jpanel本身不会停留太久…你能发布一些关于如何初始化JFrame并将jpanel添加到其中的代码吗?嘿,添加了一个代码的一部分…你能看看我正在做的任何错误吗…我特别不理解你在框架中添加面板的说法…我的代码…它不会自动关闭,为什么它会关闭?@Suraj这就是我面临的问题:)你实际上没有在面板中添加框架或下一个按钮。你修复了吗?好了下面是一些关于你最近在其他问题中使用框架和面板的评论。希望这些对你有所帮助。