当前位置: 首页 > 知识库问答 >
问题:

JavanetBeans:如何在netBeans中向JFrame发送不同的值(简历)

长孙波鸿
2023-03-14

所以我在帧1中有一个帧1和帧2,在帧1中有4个JButton JTextField,在4 JTextField有1个JButton,用户输入一个整数值...用户输入后,用户按下JButton,JFrame将特征2...

在第二帧中,我有1个JTextArea,它将打印出用户输入的值

那么如何发送值​​从第1帧到第2帧?

实际上,在这个项目中,我给出了一个构造函数,在其中我生成了一个类,在Jframe1“coba.java”中,我用以下代码生成了新的对象:

coba ar = new coba(); 

在Jframe1中,我有一个方法,其中DDA有一个代码:

double X0 = Double.parseDouble (x0.getText ()); 
double X1 = Double.parseDouble (x1.getText ()); 
double Y0 = Double.parseDouble (y0.getText ()); 
double Y1 = Double.parseDouble (y1.getText ()); 
int no = 1; 
ar.X0 = X0; 
ar.X1 = X1; 
ar.Y0 = Y0; 
ar.Y1 = Y1;

共有2个答案

谭凯
2023-03-14

基本上,第1帧需要通过某种观察器实现直接或间接引用第2帧。。。

这样,您所需要做的就是在第2帧中提供某种方法,允许您将所需的信息传递给它,以便它可以更新相关的文本区域。

就我个人而言,我更喜欢使用界面,因为它可以防止调用者弄乱它不应该做的事情

哦,你可能还想通读一下多JFrames的使用:好的还是坏的实践?

例如

NotePad接口阻止SecaryPane对底层实现进行更改,因为它实际知道的唯一方法是addNote方法

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class CrossCalling {

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

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

                NotePadPane notePadPane = new NotePadPane();

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new SecretaryPane(notePadPane));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                JFrame noteFrame = new JFrame("Testing");
                noteFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                noteFrame.setLayout(new BorderLayout());
                noteFrame.add(notePadPane);
                noteFrame.pack();
                noteFrame.setLocation(frame.getX(), frame.getY() + frame.getHeight());
                noteFrame.setVisible(true);
            }
        });
    }

    public interface NotePad {

        public void addNote(String note);

    }

    public class SecretaryPane extends JPanel {

        private NotePad notePad;

        public SecretaryPane(NotePad pad) {
            this.notePad = pad;
            setLayout(new GridBagLayout());
            JButton btn = new JButton("Make note");
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    pad.addNote(DateFormat.getTimeInstance().format(new Date()));
                }
            });
            add(btn);
        }

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

    }

    public class NotePadPane extends JPanel implements NotePad {

        private JTextArea ta;

        public NotePadPane() {
            setLayout(new BorderLayout());
            ta = new JTextArea(10, 20);
            add(new JScrollPane(ta));
        }

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

        @Override
        public void addNote(String note) {

            ta.append(note + "\n");

        }
    }

}
南宫正阳
2023-03-14

您可以创建一个线程来检查一些静态变量的更改,并相应地更新帧。例如,在显示两个帧后的某处:

    new Thread(new Runnable(){
            public void run(){
                    try{
                            while(true){
                                    if(coba.HASNEWVALUE){
                                            updateFrame(); // some function that does the updating and communicating
                                            coba.HASNEWVALUE = false;
                                    }

                            }
                    }
                    catch(Exception e){
                            e.printStackTrace();
                    }
            }

    }).start();

无论何时要传递新值,请设置适当的值并设置coba。HASNEWVALUE为true,这样您的帧将在每次coba时通过updateFrame()函数自动获取所需的更新。HASNEWVALUE为TRUE。

 类似资料:
  • 所以我在帧1中有一个帧1和帧2,在帧1中有4个JButton JTextField,在4 JTextField有1个JButton,用户输入一个整数值...用户输入后,用户按下JButton,JFrame将特征2... 在第二帧中,我有1个JTextArea,它将打印出用户输入的值 那么如何发送值​​从第1帧到第2帧?

  • 这个问题可能听起来多余,因为标题和另一个问题完全一样。然而,有一个简单的区别——我没有在构造函数中给出返回类型。话虽如此,我一定是在做其他同样愚蠢的事情,我似乎不知道是什么。我在这里看到了类似的执行工作。为什么它不适用于我的代码? 这是演示final关键字如何工作的代码的一部分(忽略注释): 问题是,这个答案显示了同样事情的良好执行,而在Netbeans中,我得到了对super的调用必须是构造函数

  • 我有一个有35列的表,其中的条目像day1、day2、day3------一直到day31。我已经用null allow accepted定义了这31列。我正在使用JdbcTemplate方法update(字符串sql,Object…args)插入记录,抛出DataAccessException,该列没有值或为空。。空值插入到表中。。那很好。 但当我更新表时,哪个列已经有一些值,但当前json条目

  • 问题内容: 我有一JFrame堂课,它是在Netbeans的设计部分制作的。我正在尝试创建一个登录按钮,该按钮将关闭当前框架并打开另一个框架,无论如何我可以这样做吗? 我努力了: 但我希望它在设计部分中可编辑! 问题答案: 双击NETBEANS中的“登录”按钮,或在Click事件上添加事件监听器(ActionListener)

  • 我发送JSON文件(现在从邮递员)的身体是这样的: 控制器上的方法是: 我犯了个错误- 如何解决这个问题?

  • 嗯,我一直在研究基于用户代理的子域间共享会话保护。 我非常惊讶,在IE 11预览版最近发布之前,它一直运行良好。有 2 个子域 example.com和sub.example.com 我已经拦截了对两个域的请求,似乎发送到每个域的用户代理HTTP标头是不同的。 example.com请求有: 用户代理: Mozilla/5.0 (视窗 NT 6.1;哇64;三叉戟/7.0;rv:11.0) 像壁虎