在我的程序中,我有一个从JPanel扩展的类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
}
谢谢
答案 0 :(得分:1)
如果您想在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);
}
}
答案 1 :(得分:0)
如果整个程序正在关闭(从您的问题中不清楚),那么它是由于您调用的某种方法(例如System.exit())而这样做的;
MainGUI是否在创建GraphDisplay后执行其他操作?如果是这样,请记住创建面板不会停止当前的执行流程。
一旦GraphDisplay完成,关闭程序的一种简洁方法是编写一个listenerInterface(使用单个'I'm Done'方法),使用MainGUI类实现该接口(关闭应用程序)并传递GraphDisplay面板的MainGUI类。然后,当用户执行所需的操作时,GraphDisplay面板可以调用“我已完成”。