2014-02-16 27 views
0

我剛剛作出了一個Java程序和Eclipse 變化Jprogress酒吧與JSlider的,但滑塊值不會改變它基本保持不變,這裏是代碼:JSlider的並沒有改變的值,並保持不變

第一類:

package pro; 

import java.awt.Color; 
import java.awt.FlowLayout; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JProgressBar; 

public class pro1 { 

int value; 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    //setting the objects 
    final pro1 p = new pro1(); 
    final pro2 p2 = new pro2(); 


    //adding the JFrame. 
    JFrame fr = new JFrame(); 
    fr.setVisible(true); 
    fr.setSize(380, 80); 
    fr.setLayout(new FlowLayout(FlowLayout.LEFT)); 
    fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


    //adding the JProgressBar. 
    JProgressBar pb = new JProgressBar(0,100); 
    pb.setOpaque(false); 
    Color c = new Color (0,200,0); 
    pb.setForeground(c);   
    pb.setValue(p.value); 


    //adding the JPanel 
    JPanel panel = new JPanel(); 
    panel.add(pb); 
    panel.add(p2.slider()); 

    //adding the panel to the frame. 
    fr.add(panel); 
    fr.revalidate(); 

} 
} 

二等:

package pro; 

import javax.swing.JSlider; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class pro2 { 

//setting the object 
     pro1 p = new pro1(); 

public JSlider slider(){ 


//adding the slider. 
     final JSlider s = new JSlider(); 
     s.setMinimum(0); 
     s.setMaximum(100); 
     s.setValue(0); 
     s.setMajorTickSpacing(10); 
     s.setPaintTicks(true); 
     s.addChangeListener(new ChangeListener(){ 

      @Override 
      public void stateChanged(ChangeEvent e) { 
       // TODO Auto-generated method stub 
       p.value = s.getValue(); 
      } 

     }); 

     return s; 
} 

我也嘗試將滑塊的值分配給一個值並將其打印出來,但它保持默認值,我將它設置爲0 ......

代碼中的任何錯誤的東西? ?

+0

P1在Pro2的被引用自己的實例,它是不是什麼在屏幕上 – MadProgrammer

回答

0

在main方法,你創建的pro1一個實例。在pro2中,您正在創建pro1的新實例。這些實例中的每一個都有自己的value

此外,當你改變value,那麼進度條不會注意到這一點。你必須明確地呼叫JProgressBar#setValue

已有的代碼一些額外的問題,這裏是一個稍微修改後的版本,顯示這樣做的一種可能的方式...

import java.awt.Color; 
import java.awt.FlowLayout; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JProgressBar; 
import javax.swing.JSlider; 
import javax.swing.SwingUtilities; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class SliderProgressTest 
{ 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
    } 

    private static void createAndShowGUI() 
    { 
     //adding the JFrame. 
     JFrame fr = new JFrame(); 
     fr.setSize(380, 80); 
     fr.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //adding the JProgressBar. 
     JProgressBar pb = new JProgressBar(0,100); 
     pb.setOpaque(false); 
     Color c = new Color (0,200,0); 
     pb.setForeground(c);   

     //adding the JPanel 
     JPanel panel = new JPanel(); 
     panel.add(pb); 
     panel.add(createSlider(pb)); 

     //adding the panel to the frame. 
     fr.add(panel); 
     fr.setVisible(true); 
    } 

    private static JSlider createSlider(final JProgressBar pb) 
    { 
     //adding the slider. 
     final JSlider s = new JSlider(); 
     s.setMinimum(0); 
     s.setMaximum(100); 
     s.setValue(0); 
     s.setMajorTickSpacing(10); 
     s.setPaintTicks(true); 
     s.addChangeListener(new ChangeListener(){ 

      @Override 
      public void stateChanged(ChangeEvent e) { 
       pb.setValue(s.getValue()); 
      } 

     }); 

     return s; 
    } 
} 
+0

哇感謝這麼多效果真的不錯,我不明白什麼是壽.. – user3314952

+0

@問題user3314952滑塊改變了實例的''value' PRO1 p =新PRO1();'所創建在'pro2'中。但是進度條顯示了在main方法中創建的'pro1 p = new pro1();'的值。因此,使用滑塊修改的「值」與進度條中顯示的「值」不同。 (此外,進度條沒有更新) – Marco13

+0

oooh我現在看到謝謝! – user3314952