如何从其他面板从 JTextField 获取输入

Posted

技术标签:

【中文标题】如何从其他面板从 JTextField 获取输入【英文标题】:How do I get input from JTextField from other panels 【发布时间】:2020-02-11 20:06:48 【问题描述】:

我是使用 JTextFields 的新手,对如何从 3 个不同的面板获取输入感到好奇。小组将从输入中获取数字并对分数进行平均。为此,我想访问所有 3 个面板来进行数学计算。我有一个面板,用于计算我想要平均的三个不同人的分数。因此,我想获取 mattsTotalScore 并将其与 timsTotalScore 和 BensTotalScore 相加,并使平均值出现在第四个面板上的按钮之后。

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

public class MattPanel extends JPanel 

    public MattPanel()
        Dimension size = getPreferredSize();
        size.width = 250;
        setPreferredSize(size);
        setBorder(BorderFactory.createTitledBorder("Matt's Scores"));

        JLabel memMatt = new JLabel("MEMORABILITY :");
        JTextField textMemMattPane = new JTextField(10);

        JLabel comMatt = new JLabel("COMPOSITION :");
        JTextField textComMattPane = new JTextField(10);

        JLabel mixMatt = new JLabel("MIX/MASTER :");
        JTextField textMixMattPane = new JTextField(10);

        JLabel soundMatt = new JLabel("SOUND DESIGN :");
        JTextField textSoundMattPane = new JTextField(10);

        JLabel enjoyMatt = new JLabel("ENJOYMENT :");
        JTextField textEnjoyMattPane = new JTextField(10);

        setLayout(new GridBagLayout());

        GridBagConstraints gc = new GridBagConstraints();

        ///First Column ///////////////////////
        gc.anchor = GridBagConstraints.LINE_END;
        gc.weightx = 0.5; gc.weighty = 0.5;
        gc.gridx = 0; gc.gridy = 0;
        add(memMatt, gc);

        gc.gridx = 0; gc.gridy = 1;
        add(comMatt, gc);

        gc.gridx = 0; gc.gridy = 2;
        add(mixMatt, gc);

        gc.gridx = 0; gc.gridy = 3;
        add(soundMatt, gc);

        gc.gridx = 0; gc.gridy = 4;
        add(enjoyMatt, gc);

        //Second Column //////////////////////
        gc.anchor = GridBagConstraints.LINE_START;
        gc.gridx = 1; gc.gridy = 0;
        add(textMemMattPane,gc);

        gc.gridx = 1; gc.gridy = 1;
        add(textComMattPane,gc);

        gc.gridx = 1; gc.gridy = 2;
        add(textMixMattPane,gc);

        gc.gridx = 1; gc.gridy = 3;
        add(textSoundMattPane,gc);

        gc.gridx = 1; gc.gridy = 4;
        add(textEnjoyMattPane,gc);
    

【问题讨论】:

按照你的方式,你不能。您所有的字段都是本地字段。在类级别声明它们,您可以为它们及其值创建设置器 啊好吧,这很有道理。我试试看 ..MattPanel extends JPanel 除非确实需要,否则不要扩展 GUI 组件。它会导致这样的难题。 【参考方案1】:

您可以尝试使用 JPanel 中的 getComponents() 方法来获取所有组件,尽管您必须以某种方式识别 TextField,例如:

MattPanel panel = new MattPanel();
int sum = 0;
int nr = 0;
for(Component comp : panel.getComponents())
    if(comp instanceof JTextField) 
        String text = ((JTextField)comp).getText();
        sum += Integer.parseInt(text);
        nr ++;
    

double avg = sum/nr;

【讨论】:

这是一个尝试和解释糟糕设计的技巧。修复是通过修复设计来完成的。

以上是关于如何从其他面板从 JTextField 获取输入的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JTextField 获取字符串并将其保存在变量中的更新?

如何从 A 类中的 JTextField 输入向 B 类中的数据库插入值

如何从另一个 java 类中的 jTextField 或 jFormattedTextField 获取数据

从动态添加的 jPanel 中获取文本

java中JTextField输入的字符如何进行判断非法输入

Sencha Touch 2:如何从面板获取 HTML 以及输入值