2012-12-18 20 views
1

我想为我的滑块添加一个按钮。我想要的是当我点击按钮时,滑块的值将保存在一个变量中。但是我总是在使用ActionListener的时候出现错误。任何人都可以请帮忙。这里是我的滑代码:Java:为滑块添加一个“接受”按钮

import javax.swing.*; 
import javax.swing.event.*; 
import java.awt.*; 
import java.util.Hashtable; 

public class SliderSample { 
public static void main(final String args[]) { 
Runnable runner = new Runnable() { 
public void run() { 
JFrame frame = new JFrame("Sample Sliders"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
ChangeListener listener = new SliderChangeListener(); 

JSlider js4 = new JSlider(1,5); 
Hashtable<Integer, JComponent> table = new Hashtable<Integer, JComponent>(); 
table.put(1, new JLabel("1")); 
table.put(2, new JLabel("2")); 
table.put(3, new JLabel("3")); 
table.put(4, new JLabel("4")); 
table.put(5, new JLabel("5")); 
js4.setLabelTable(table); 
js4.setPaintLabels(true); 
js4.addChangeListener(listener); 
frame.add(js4, BorderLayout.CENTER); 
frame.setSize(400, 300); 
frame.setVisible(true); 
} 
}; 
EventQueue.invokeLater(runner); 
} 
public static class SliderChangeListener implements ChangeListener { 
public void stateChanged(ChangeEvent changeEvent) { 
Object source = changeEvent.getSource(); 
JSlider theJSlider = (JSlider)source; 
if (!theJSlider.getValueIsAdjusting()) {System.out.println ("Slider changed: " +   theJSlider.getValue()); 
} 
} 
} 
} 
+1

您能提供有关错误的更多信息吗?例如,堆栈跟踪非常有用。 – Henrik

+0

@Henrik我是新来的java。我试过的是添加一个JButton后:frame.setVisible(true); 之后,我把一个ActionListener fot这个按钮像这样: accept.addActionListener(this); 它给了我一个关于“this”的错误。 – user1913798

+0

我强烈建议使用更好的变量命名。从长远来看,它的维护只是现在的痛苦,再加上它看起来很丑。看看[命名约定](http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367) – eSuarez

回答

3

“这个”不能在此时使用,因为你讲话了Runnable你是在改变这样的:。

public class SliderSample { 
    private JSlider js4 = new JSlider(1, 5); 
    private int state = js4.getValue(); 

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

    public SliderSample() { 
     JFrame frame = new JFrame("Sample Sliders"); 
     ... 

     JButton b = new JButton("Save"); 
     b.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       state = js4.getValue(); 
       System.out.println("new state: " + state); 
      } 
     }); 

     Hashtable<Integer, JComponent> table = new Hashtable<Integer, JComponent>(); 
     ... 
     frame.setVisible(true); 
} 
+0

非常感谢你@Stefan Lindenberg! – user1913798

2

我已经修改你的代码。增加了一个按钮,将滑块的值保存到变量中。

import javax.swing.*; 
import javax.swing.event.*; 
import java.awt.*; 
import java.util.Hashtable; 

public class SliderSample { 
    private static JFrame frame = new JFrame("Sample Sliders"); 
    private static JSlider slider = new JSlider(1,5); 
    private static JButton button =new JButton("Button"); 
    private static int saveNumberHere; 


    public static void main(final String args[]) { 
     Runnable runner = new Runnable() { 
      public void run() { 

       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       Hashtable<Integer, JComponent> table = new Hashtable<Integer, JComponent>(); 
       table.put(1, new JLabel("1")); 
       table.put(2, new JLabel("2")); 
       table.put(3, new JLabel("3")); 
       table.put(4, new JLabel("4")); 
       table.put(5, new JLabel("5")); 
       slider.setLabelTable(table); 
       slider.setPaintLabels(true); 

       ChangeListener sliderListener = new SliderChangeListener(); 
       slider.addChangeListener(sliderListener); 
       ChangeListener buttonListener = new ButthonChangeListener(); 
       button.addChangeListener(buttonListener); 

       frame.add(slider, BorderLayout.CENTER); 
       frame.add(button, BorderLayout.SOUTH); 
       frame.setSize(400, 300); 
       frame.setVisible(true); 
      } 
     }; 
     EventQueue.invokeLater(runner); 
    } 
    public static class SliderChangeListener implements ChangeListener { 
     public void stateChanged(ChangeEvent changeEvent) { 
      if (!slider.getValueIsAdjusting()) { 
       System.out.println ("Slider changed: " +   slider.getValue()); 
      }    
     } 
    } 

    public static class ButthonChangeListener implements ChangeListener{ 
     public void stateChanged(ChangeEvent changeEvent) { 
      saveNumberHere = slider.getValue(); 
     } 
    } 
}