【问题标题】:I need to be able to change the title of the frame in java via a button in another class我需要能够通过另一个类中的按钮更改java中框架的标题
【发布时间】:2012-06-16 02:08:09
【问题描述】:

我已经在网上搜索了大约 2 个小时。我需要完成的是一种在另一个类中有一个按钮的方法,改变整个程序的框架窗口的标题。所以基本上我想做到这一点,以便客户可以将 setTitle 更改为他的公司名称。这是我目前所拥有的两个类的代码,这两个类都将涉及到这个问题。

Options.java

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Options extends JPanel {
    JLabel nameLabel;
    JTextField nameField;
    JButton sNn;

    public Options()
    {
        nameLabel = new JLabel();
        nameLabel.setText("Change Company Name:");
        nameField = new JTextField(22);
        sNn = getTitleChangeButton();
        ExitButton exitButton = new ExitButton();

        this.add(nameLabel);
        this.add(nameField);
        this.add(sNn);
        this.add(exitButton.getExitButton());   
    }

    public JButton getTitleChangeButton()
    {
        JButton ChangeTitle; 
        ChangeTitle = new JButton("Change Company Title");
        ChangeTitle.setMnemonic('C');
        ChangeTitle.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {       
                String title;       
            }
        });
            return ChangeTitle;
            }
        }

这是第二个类,称为 tabbedPane。这是我想成为超类并通过按钮更改 setTitle 的类。

TabbedPane.java

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
//import poolCalculation.PoolVolumeCalc;
//import poolCalculation.GenTab;
//import poolCalculation.TempCalc;
import poolCalculation.Options;

public class TabbedPane extends JFrame
{
    public TabbedPane()
    {

        setTitle("Gardening INC.");

        JTabbedPane Tabs = new JTabbedPane();
        getContentPane().add(Tabs);

        JPanel jp1 = new JPanel();

        //Tabs.addTab("Pool Volume Calculator", new PoolVolumeCalc());
        //Tabs.addTab("General Tab", new GenTab());
        //Tabs.addTab("Temperature Calculation", new TempCalc());
        Tabs.addTab("Options", new Options());

        getContentPane().add(Tabs);
        setSize(400,300);
        setVisible(true);
    }

    public static void main(String[] args) {
        TabbedPane test = new TabbedPane();
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

对于我的生活,当用户单击选项中的按钮时,我无法弄清楚如何更改框架的标题。到目前为止,这是我尝试过的,我尝试在 TabbedPane 的主要部分中制作 setTitle(title) 并使其成为一个字符串,然后使用 get 方法从选项中获取文本,但这不起作用。或者我做错了。我尝试将按钮设为自己的类,但遇到无法读取文本字段的问题。

【问题讨论】:

  • 能否将要更改其标题的 JFrame 的引用作为选项类的字段,然后调用 jFReference.setTitle(newTitle)
  • 你可能是对的,那将是更简单的方法....笨蛋。然而,我确实从下面的海报中得到了答案。这似乎与更多的代码一起工作。无论哪种方式,我都对我得到的输出感到满意。感谢回复

标签: java swing frames


【解决方案1】:

这是一个演示如何动态更改标题的示例:

import java.awt.BorderLayout;
import java.awt.Container;
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.JTextField;
import javax.swing.SwingUtilities;

public class NormalFrame extends JFrame
{
    private static final long serialVersionUID = 1L;

    public NormalFrame()
    {
        super("The title");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        Container contentPane = getContentPane();
        contentPane.add(new CustomPanel(this));

        pack();
        setLocationRelativeTo(null);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new NormalFrame().setVisible(true);
            }
        });
    }
}

class CustomPanel extends JPanel
{
    private static final long serialVersionUID = 1L;
    private JFrame mainFrame;
    private JLabel lbl;
    private JTextField txt;
    private JButton btn;

    private ActionListener listener = new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            mainFrame.setTitle(txt.getText());
        }
    };

    public CustomPanel(JFrame mainFrame)
    {
        this.mainFrame = mainFrame;

        lbl = new JLabel("The new title: ");
        txt = new JTextField(10);
        btn = new JButton("Change Title");
        btn.addActionListener(listener);

        setLayout(new BorderLayout());
        add(lbl, BorderLayout.LINE_START);
        add(txt, BorderLayout.CENTER);
        add(btn, BorderLayout.LINE_END);
    }
}

【讨论】:

  • 虽然,它可能会起作用,但我怀疑,在构造函数中使用this 确实是一个好习惯:( 就像你在NormalFrame 类中所做的那样,虽然为SSCCE +1 :-)
  • 非常感谢,效果很好。我做了一些更改,因为我不太喜欢边界布局的工作方式。但是我做错的代码的实际牛肉是一个很大的帮助。非常感谢
  • @user1460026 不客气,我很高兴能帮上忙 :) .. 顺便说一句,不要忘记接受这个答案作为正确答案。
  • 我假设它是绿色复选标记...但我不确定在 XD 之前从未使用过这个网站
  • @popas 是的,它是。欢迎来到 Stackoverflow ;)
猜你喜欢
  • 2021-05-29
  • 2020-11-24
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2022-10-20
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多