2014-02-16 2 views
0

Я просто сделал программу Java с затмением для изменений бара 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

В вашем основном методе вы создаете экземпляр 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

wow благодарит так сильно, что это действительно сработало, я не понял, в чем проблема tho .. – user3314952

+0

@ user3314952 Ползунок изменил 'значение' экземпляра' pro1 p = new pro1(); 'который был создан в 'pro2'. Но индикатор выполнения показал «значение» из 'pro1 p = new pro1();', который был создан в основном методе. Таким образом, значение «value», которое было изменено с помощью ползунка, было другим, чем «значение», которое было показано в строке выполнения. (И, кроме того, индикатор выполнения не обновлялся) – Marco13

+0

oooh Теперь я вижу спасибо! – user3314952

 Смежные вопросы

  • Нет связанных вопросов^_^