更改JFrame标题

时间:2011-03-30 14:23:30

标签: java eclipse jframe

此代码编译,我只是无法在标题栏上更改名称。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  
import javax.swing.JButton;  
import javax.swing.JFrame;  
import javax.swing.JLabel;  
import javax.swing.JPanel;  
import javax.swing.JTabbedPane;  
import javax.swing.JTextArea;  
import javax.swing.JTextField;  
public class VolumeCalculator extends JFrame implements ActionListener  
{  
    private JTabbedPane jtabbedPane;  
    private JPanel options;  
    JTextField poolLengthText, poolWidthText, poolDepthText, poolVolumeText, hotTub,  
            hotTubLengthText, hotTubWidthText, hotTubDepthText, hotTubVolumeText, temp, results,
            myTitle;  
    JTextArea labelTubStatus;  
    public VolumeCalculator()  
    {  
        setSize(400, 250);  
        setVisible(true);  
        setSize(400, 250);  
        setVisible(true);  
        setTitle("Volume Calculator");  
        setSize(300, 200);  
        JPanel topPanel = new JPanel();  
        topPanel.setLayout(new BorderLayout());  
        getContentPane().add(topPanel);  

        createOptions();  

        jtabbedPane = new JTabbedPane();  

        jtabbedPane.addTab("Options", options);  

        topPanel.add(jtabbedPane, BorderLayout.CENTER);  
    } 
    /* CREATE OPTIONS */ 

    public void createOptions()  
    {  
        options = new JPanel();  
        options.setLayout(null);  
        JLabel labelOptions = new JLabel("Change Company Name:");  
        labelOptions.setBounds(120, 10, 150, 20);  
        options.add(labelOptions);  
        JTextField newTitle = new JTextField("Some Title"); 
        newTitle.setBounds(80, 40, 225, 20);  
        options.add(newTitle);
        myTitle = new JTextField();   
        myTitle.setBounds(80, 40, 225, 20); 
        myTitle.add(labelOptions); 
        JButton newName = new JButton("Set New Name");  
        newName.setBounds(60, 80, 150, 20);  
        newName.addActionListener(this);  
        options.add(newName);  
        JButton Exit = new JButton("Exit");  
        Exit.setBounds(250, 80, 80, 20);  
        Exit.addActionListener(this);  
        options.add(Exit);  
    }  
    public void actionPerformed(ActionEvent event)  
    {  
        JButton button = (JButton) event.getSource();  
        String buttonLabel = button.getText();  
        if ("Exit".equalsIgnoreCase(buttonLabel))  
        {  
            Exit_pressed();  
            return;  
        }  
        if ("Set New Name".equalsIgnoreCase(buttonLabel))  
        {  
            New_Name();  
            return;  
        }  
    }  
    private void Exit_pressed()  
    {  
        System.exit(0);  
    }  
    private void New_Name()  
    {  
        this.setTitle(myTitle.getText());  
    }  
    private void Options()  
    {  
    }  
    public static void main(String[] args)  
    {  
        JFrame frame = new VolumeCalculator();  
        frame.setSize(380, 350);  
        frame.setVisible(true);  
    }  
}

4 个答案:

答案 0 :(得分:28)

如果您的类扩展了JFrame,请使用this.setTitle(newTitle.getText());

如果没有并且它包含一个JFrame,我们可以说是名为myFrame,那就使用myFrame.setTitle(newTitle.getText());

现在您已经发布了程序,很明显您只需要一个JTextField来获取新标题。这些改变将起到作用:

JTextField poolLengthText, poolWidthText, poolDepthText, poolVolumeText, hotTub,
        hotTubLengthText, hotTubWidthText, hotTubDepthText, hotTubVolumeText, temp, results,
        newTitle;

和:

    public void createOptions()
    {
        options = new JPanel();
        options.setLayout(null);
        JLabel labelOptions = new JLabel("Change Company Name:");
        labelOptions.setBounds(120, 10, 150, 20);
        options.add(labelOptions);
        newTitle = new JTextField("Some Title");
        newTitle.setBounds(80, 40, 225, 20);
        options.add(newTitle);
//        myTitle = new JTextField("My Title...");
//        myTitle.setBounds(80, 40, 225, 20);
//        myTitle.add(labelOptions);
        JButton newName = new JButton("Set New Name");
        newName.setBounds(60, 80, 150, 20);
        newName.addActionListener(this);
        options.add(newName);
        JButton Exit = new JButton("Exit");
        Exit.setBounds(250, 80, 80, 20);
        Exit.addActionListener(this);
        options.add(Exit);
    }

private void New_Name()
{
    this.setTitle(newTitle.getText());
}

答案 1 :(得分:6)

newTitle是一个局部变量,您可以在其中创建字段。因此,当函数结束时,变量newTitle不再存在。 (newTitle引用的JTextField仍然存在。)

因此,增加变量的范围,以便您可以访问另一种方法。

public SomeFrame extends JFrame {
   JTextField myTitle;//can be used anywhere in this class

   creationOfTheFields()
   {
   //other code
      myTitle = new JTextField("spam");  
      myTitle.setBounds(80, 40, 225, 20);
      options.add(myTitle);
   //blabla other code
   }

   private void New_Name()  
   {  
      this.setTitle(myTitle.getText());  
   } 
}

答案 2 :(得分:1)

我强烈建议您学习如何使用布局管理器来获取您想要查看的布局。 null布局很脆弱,无法解决问题。

试试这个来源&检查评论。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class VolumeCalculator extends JFrame implements ActionListener {
    private JTabbedPane jtabbedPane;
    private JPanel options;
    JTextField poolLengthText, poolWidthText, poolDepthText, poolVolumeText, hotTub,
            hotTubLengthText, hotTubWidthText, hotTubDepthText, hotTubVolumeText, temp, results,
            myTitle;
    JTextArea labelTubStatus;

    public VolumeCalculator(){
        setSize(400, 250);
        setVisible(true);
        setSize(400, 250);
        setVisible(true);
        setTitle("Volume Calculator");
        setSize(300, 200);
        JPanel topPanel = new JPanel();
        topPanel.setLayout(new BorderLayout());
        getContentPane().add(topPanel);

        createOptions();

        jtabbedPane = new JTabbedPane();

        jtabbedPane.addTab("Options", options);

        topPanel.add(jtabbedPane, BorderLayout.CENTER);
    }
    /* CREATE OPTIONS */

    public void createOptions(){
        options = new JPanel();
        //options.setLayout(null);
        JLabel labelOptions = new JLabel("Change Company Name:");
        labelOptions.setBounds(120, 10, 150, 20);
        options.add(labelOptions);
        JTextField newTitle = new JTextField("Some Title");
        //newTitle.setBounds(80, 40, 225, 20);    
        options.add(newTitle);
        myTitle = new JTextField(20);
        // myTitle WAS NEVER ADDED to the GUI!
        options.add(myTitle);
        //myTitle.setBounds(80, 40, 225, 20);
        //myTitle.add(labelOptions);
        JButton newName = new JButton("Set New Name");
        //newName.setBounds(60, 80, 150, 20);
        newName.addActionListener(this);
        options.add(newName);
        JButton Exit = new JButton("Exit");
        //Exit.setBounds(250, 80, 80, 20);
        Exit.addActionListener(this);
        options.add(Exit);
    }

    public void actionPerformed(ActionEvent event){
        JButton button = (JButton) event.getSource();
        String buttonLabel = button.getText();
        if ("Exit".equalsIgnoreCase(buttonLabel)){
            Exit_pressed();
            return;
        }
        if ("Set New Name".equalsIgnoreCase(buttonLabel)){
            New_Name();
            return;
        }
    }

    private void Exit_pressed(){
        System.exit(0);
    }

    private void New_Name(){
        System.out.println("'" + myTitle.getText() + "'");
        this.setTitle(myTitle.getText());
    }

    private void Options(){
    }

    public static void main(String[] args){
        JFrame frame = new VolumeCalculator();
        frame.pack();
        frame.setSize(380, 350);
        frame.setVisible(true);
    }
}

答案 3 :(得分:0)

这些方法可以提供帮助 setTitle(“你的新头衔”); 要么 超级(“你的新头衔”);