更改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); } } 

如果你的类扩展了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()); } 

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()); } } 

我强烈建议您学习如何使用布局管理器来获取您想要查看的布局。 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); } } 

这些方法可以帮助setTitle(“你的新标题”); 或超级(“你的新头衔”);