【问题标题】:How to take a value from a private method如何从私有方法中获取值
【发布时间】:2014-09-04 11:58:36
【问题描述】:

我使用NetBeans 创建了一个 jSlider ChangeEvent,代码如下:

public class Slider extends javax.swing.JFrame {
    public Slider() {
         initComponents;
         field.getText();
         String fieldVal = field.getText();
         jtextField1.setText(fieldVal):
    }

    public JTextField getField() {
         return field;
    }

    public void setField(JTextField field) {
          this.field = field;
    }

    private void sliderStateChanged(javax.swing.event.ChangeEvent evt) { 
          int value = slider.getValue();
          String val = value + "";
          field.setText(val + "%");
    }

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

所以,我有一个JTextField(字段)正在从 jSpiner 接收值。一切正常,但我想使用“val”并用它进行一些计算。

但我不能这样做,因为它是在一个私有方法中,并且我尝试使用 Refactor -> Change 方法参数将其公开,但它给了我以下警告:只读文本块不能被重构。,它不起作用。

我也尝试过制作 getter 和 setter,但仍然无法正常工作。我想要的就是接受那个价值。我可以直接从 JTextField (field) 中获取它,但我也想在其中包含“%”,所以我无法进行计算...有人可以帮我出个主意吗?我知道我做错了什么,但不知道错在哪里。或者是否有可能以其他方式将“%”放在文本字段中?我需要一些帮助,谢谢!

最好的问候, 尤利亚

【问题讨论】:

  • val 是范围变量,不是私有成员,无法通过反射访问。您可以在任何私有成员中分配 val 值,然后可以使用反射访问该成员
  • “拥有%”是什么意思
  • field.setText(val + "%"); - 对不起,我忘了把它,我会编辑我的帖子。我正在尝试修复代码,谢谢

标签: java netbeans slider trygetvalue


【解决方案1】:

从您编辑的问题中,我可以看到您所需要的只是一个显示附加了 % 的滑块值的文本框。

这是一个显示这一点的代码示例。 https://gist.github.com/anonymous/96e898ec41cd2ed0f821

创建一个文件名NewJFrame.java复制代码并运行以查看结果。

根据您的代码,我认为文本字段有问题可能是它没有初始化。如果您分享您的整个代码,我可以找到错误。

【讨论】:

  • 我按照你说的做了,但仍然没有将值带到 JTextField。清理和构建没有错误......我做错了什么吗?谢谢
  • 关注我编辑的答案。如果您仍然有任何问题评论,请接受我的回答。
【解决方案2】:

Java Reflection 来救援!在类上使用 getDeclaredField,然后 setAccessible(true);最后通过 field.get(instance) 反射性地获取值!啧啧。

另外,更复杂的是,实现一个 ClassLoader 并修改所述字段/方法的“修饰符”以使其公开...

总体而言,反思具有重大意义和影响。请仔细阅读。

【讨论】:

  • 反思?认真的吗?
  • 反射有效,很多框架在幕后使用它,尤其是 XML 来帮助反序列化。例如,JNI 使用与反射 API 相同的插件;但我同意,反射是丑陋的/废话。
【解决方案3】:

据我了解,您不能将 String val 设为作用域外的全局变量而不是局部变量,然后使用它吗?

【讨论】:

  • 我创建了 String val 全局变量,并添加了 jTextField.setText(val);我还添加了 this.val = val;到该方法,但仍然无法正常工作,并且我没有错误,不知道该怎么办...谢谢
【解决方案4】:

临时解决方案可以是:

如果要更改限制区域,复制粘贴代码 在一个新的.java 文件中并进行编辑。

如果只是关于值,创建一个公共变量并分配JSlider 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2011-10-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多