Change JFrame Name

This code compiles, I just can't change the name in the title bar.

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); } } 
+8
source share
4 answers

If your class extends JFrame, use this.setTitle(newTitle.getText());

If not, and it contains a JFrame, say the name myFrame, use myFrame.setTitle(newTitle.getText());

Now that you have placed your program, it is obvious that you only need one JTextField to get a new header. These changes will do the trick:

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

and:

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

and

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

newTitle is the local variable in which you create the fields. Therefore, when these functions end, the variable newTitle no longer exists. (The JTextField referenced by newTitle still exists.)

Thus, increase the scope of the variable so that you can access another method.

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

I highly recommend that you learn how to use layout managers to get the layout you want to see. null layouts are fragile and cause no problems.

Try this source and check the comments.

 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); } } 
+1
source

these methods can help setTitle ("your new title"); or super ("your new name");

0
source

All Articles