java - 如何在 jframe 中单击 jbutton 时执行 .java 文件?

标签 java swing jframe jbutton

单击 jframe 中的 jbutton 时,我希望执行 Start.java 文件;怎么办? Start.java 执行良好。我希望在 jframe 中单击 jbutton 时执行相同的执行,请帮助我。

我的jframe代码有jbutton

private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {   

    // i want to execute Start.java file on clicking the button

     Start s = new Start();
     String in = s.getTxt;
     System.out.println(in);
    repaint();
 }  

我的 Start.java 文件是:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Start extends JPanel{

public String getTxt;
public Start()
{

 final  JTextField jf = new JTextField(20);
 jf.setBounds(30, 30, 250, 30);
 final JButton j1 = new JButton("OK");
 j1.setBounds(80, 80, 100, 30);
 setLayout(null);

 add(jf);
 add(j1);

   j1.addActionListener(new ActionListener() {
       @Override
       public void actionPerformed(ActionEvent e) {


                        getTxt = jf.getText();
                        System.out.println(getTxt);

                    }
                   });
  }


 public static void main(String[] args) {

    JFrame f = new JFrame("Interest");
    f.getContentPane().add(new Start());
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setPreferredSize(new Dimension(310,250));
    f.setMaximumSize(new Dimension(310,250));
    f.setMinimumSize(new Dimension(310,250));

    f.pack();
    f.setVisible(true);
}

最佳答案

因此,根据您似乎在代码中执行的操作,我强烈建议您查看 How to Make Dialogs ,主要原因是,模态对话框会导致程序的执行在对话框可见的位置停止,并在对话框关闭时恢复,这样,您就可以检查用户可能更改的值。

所以,当我第一次尝试让你的程序运行时,这就是发生的事情......

Bad

因此,在深入研究您的代码后,我注意到您已经完成了 setLayout(null);。这将继续困扰您,我强烈建议您不要这样做并学习如何使用布局管理 API。

所以,我跳进了你的代码并添加了一个布局管理器......

public class Start extends JPanel {

    public String getTxt;

    public Start() {

        final JTextField jf = new JTextField(20);
        final JButton j1 = new JButton("OK");
        setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;

        add(jf, gbc);
        add(j1, gbc);

        j1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                getTxt = jf.getText();
                System.out.println(getTxt);

            }
        });
    }

    public static void main(String[] args) {

        JFrame f = new JFrame("Interest");
        f.getContentPane().add(new Start());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setPreferredSize(new Dimension(310, 250));
        f.setMaximumSize(new Dimension(310, 250));
        f.setMinimumSize(new Dimension(310, 250));

        f.pack();
        f.setVisible(true);
    }
}

现在我明白了......

better

好的,但是现在有两个按钮,除非用户单击中间的按钮,否则永远不会设置文本!

事实是,对于这种事情,您不需要按钮!您只需要一个可以返回 JTextField 的当前文本的方法,例如...

public class Start extends JPanel {

    final JTextField jf = new JTextField(20);

    public Start() {
        setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;

        add(jf, gbc);
    }

    public String getText() {
        return jf.getText();
    }

    public static void main(String[] args) {

        JFrame f = new JFrame("Interest");
        f.getContentPane().add(new Start());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setPreferredSize(new Dimension(310, 250));
        f.setMaximumSize(new Dimension(310, 250));
        f.setMinimumSize(new Dimension(310, 250));

        f.pack();
        f.setVisible(true);
    }
}

然后我可以使用...

Done!

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            JButton btn = new JButton("Surprise");
            add(btn);

            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Start start = new Start();
                    JOptionPane.showMessageDialog(TestPane.this, start, "Surprise", JOptionPane.PLAIN_MESSAGE);
                    System.out.println(start.getText());
                }
            });
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }
}

展示它!

我强烈建议您花时间看看 Laying Out Components Within a Container

关于java - 如何在 jframe 中单击 jbutton 时执行 .java 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36662036/

相关文章:

java - JButton打印一封信

java - 通过拆分为多个页面来打印 JFrame

java - 对实习生字符串、字符串池和永久空间的垃圾收集

java - JLabel - 更改标题的位置

Java ArrayList StringBuilder追加

java - 如何在 JPanel GridLayout 上实现鼠标进入和鼠标退出?

java - Netbeans 中的 jsplitpane

java - 单击按钮时,我的 Jframe 不会保持打开状态

java - Firestore 中哪种文档快照字段访问方法更快?

java - NOSQLUnit-mongoDB-示例