在方法上使用setTitle

时间:2014-01-09 22:53:55

标签: java swing

我需要从方法(而不是构造函数)设置标题。我尝试这样做,但它不起作用:

import javax.swing.*;
import java.awt.*;
public class PointGraphWriter extends JPanel
{
   public String title;

   public void setTitle(String name)
   {
       title = name;
   }
   public PointGraphWriter()
   {
       JFrame frame = new JFrame;
       int width= 300;
       frame.setSize(width*3/2,width);
       frame.setVisible(true);
       frame.setTitle(title);
       frame.setBackground(Color.white);
       frame.getContentPane;
       frame.add(this);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
}

主要方法:

public class TestPlot
{
    public static void main(String[] a)
    { 
        PointGraphWriter e = new PointGraphWriter();
        e.setTitle("Graph of y = x*x");
    }
}

2 个答案:

答案 0 :(得分:3)

您更改了变量title,但这不会影响框架。您需要再次在框架上调用setTitle

保留框架的实例变量:

private JFrame frame;

在构造函数中,将新JFrame分配给实例变量,以便稍后在setTitle中更改其标题:

public void setTitle(String name)
{
   title = name;
   frame.setTitle(name);
}

答案 1 :(得分:0)

你有一个改变变量title的方法,这很好。您遇到的问题是您正在尝试在构造函数方法中设置框架的标题。

在此代码中:

PointGraphWriter e = new PointGraphWriter();
e.setTitle("Graph of y = x*x");
在使用e方法更改setTitle类中的title变量
之前

PointGraphWriter构造。因此,您尝试将框架的标题设置为null字符串,因为setTitle方法仅在构造函数方法之后调用。

你可以做两件事:

  1. setTitle方法中设置框架的标题:

    JFrame frame = new JFrame;
    public void setTitle(String name)
    {
        frame.setTitle(name);
    }
    
  2. 或者您可以更改构造函数方法以将标题作为参数:

    public PointGraphWriter(String title)
    {
        JFrame frame = new JFrame;
        int width= 300;
        frame.setSize(width*3/2,width);
        frame.setVisible(true);
        frame.setTitle(title);
        frame.setBackground(Color.white);
        frame.getContentPane;
        frame.add(this);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    

    然后像这样创建PointGraphWriter

    PointGraphWriter e = new PointGraphWriter("Graph of y = x*x");