2014-09-04 33 views
0

我一直在使用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(字段),但我想也有「%」,所以我不能做計算...有人可以幫我一個想法嗎?我知道我錯了什麼,但不知道錯在哪裏。或者有可能以其他方式在文本字段中添加「%」?我需要一些幫助,謝謝!

最好的問候, 尤利婭

+0

val是一個作用域變量,不是私有成員,它不能通過反射訪問。你可以在任何私人會員中分配val值,並且以後可以使用反射來訪問該會員 – 2014-09-04 12:08:24

+0

你是什麼意思「有%」 – JamesB 2014-09-04 12:09:31

+0

field.setText(val +「%」); - 對不起,我忘記了,我會編輯我的帖子。我正在修復代碼,謝謝 – Iulia 2014-09-04 12:22:36

回答

0

的Java Reflection來救援!在類上使用getDeclaredField,然後setAccessible(true);最後反射性地通過field.get(instance)獲取值! TUH,咄。

另外,和更復雜,實施一個ClassLoader和修改「修飾」的所述場強/法把它公開...

總體而言,反射具有重大的意義和影響。請閱讀它。

+0

反思?真的嗎? – JamesB 2014-09-04 12:09:57

+0

反射的作品,以及相當多的框架在幕後使用它,尤其是XML來輔助反序列化。例如,JNI使用與Reflection API相同的插件;但我同意,反射是醜陋的/廢話。 – Alex 2014-09-04 14:09:06

0

從我的理解,你不能讓字符串val作爲範圍之外的全局變量而不是局部變量,然後使用它嗎?

+0

我做了String val全局變量,並添加了jTextField.setText(val);我也加了this.val = val;到該方法,但仍然不工作,我沒有錯誤,不知道該怎麼辦...謝謝 – Iulia 2014-09-04 18:22:21

0

一個臨時的解決方案可以是:

如果您想更改到禁區,複製代碼 粘貼到一個新.java文件和編輯。

如果只是關於該值,請創建一個公共變量並指定JSlider值。

0

從您編輯的問題中,我可以看到您需要的是一個文本框,其中顯示了附加的滑塊的值。

這是一個代碼示例,顯示了這一點。 https://gist.github.com/anonymous/96e898ec41cd2ed0f821

創建一個文件名NewJFrame.java副本和害蟲的代碼並運行,看結果。

根據你的代碼,我認爲文本字段有問題可能是它沒有被初始化。如果你分享你的整個代碼,我可以找到缺陷。

+0

我做了你所說的,但仍然沒有把值給JTextField。清理和構建沒有錯誤...有什麼我做錯了嗎?謝謝 – Iulia 2014-09-04 18:17:10

+0

請按照我編輯的答案。如果您仍然有任何問題評論,請接受我的回答。 – mirmdasif 2014-09-06 10:46:31

相關問題