栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java JSlider精度问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java JSlider精度问题

为什么不说JSlider模型的粒度从0到1000000,并且总和为1000000,以使粒度更细?使用适用

Dictionary
于LabelTable
的适当名称,用户可能不会知道它的范围不是从0到100。

例如:

import java.awt.Dimension;import java.awt.GridLayout;import java.util.ArrayList;import java.util.Dictionary;import java.util.Hashtable;import java.util.List;import javax.swing.*;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;@SuppressWarnings("serial")public class linkedSliders2 extends JPanel {   private static final int SLIDER_COUNT = 5;   public static final int SLIDER_MAX_VALUE = 1000;   private static final int MAJOR_TICK_DIVISIONS = 5;   private static final int MINOR_TICK_DIVISIONS = 20;   private static final int LS_WIDTH = 700;   private static final int LS_HEIGHT = 500;   private JSlider[] sliders = new JSlider[SLIDER_COUNT];   private SliderGroup2 sliderGroup = new SliderGroup2(SLIDER_MAX_VALUE);   public linkedSliders2() {      Dictionary<Integer, JComponent> myDictionary = new Hashtable<Integer, JComponent>();      for (int i = 0; i <= MAJOR_TICK_DIVISIONS; i++) {         Integer key = i * SLIDER_MAX_VALUE / MAJOR_TICK_DIVISIONS;         JLabel value = new JLabel(String.valueOf(i * 100 / MAJOR_TICK_DIVISIONS));         myDictionary.put(key, value);      }      setLayout(new GridLayout(0, 1));      for (int i = 0; i < sliders.length; i++) {         sliders[i] = new JSlider(0, SLIDER_MAX_VALUE, SLIDER_MAX_VALUE    / SLIDER_COUNT);         sliders[i].setLabelTable(myDictionary );         sliders[i].setMajorTickSpacing(SLIDER_MAX_VALUE / MAJOR_TICK_DIVISIONS);         sliders[i].setMinorTickSpacing(SLIDER_MAX_VALUE / MINOR_TICK_DIVISIONS);         sliders[i].setPaintLabels(true);         sliders[i].setPaintTicks(true);         sliders[i].setPaintTrack(true);         sliderGroup.addSlider(sliders[i]);         add(sliders[i]);      }   }   @Override   public Dimension getPreferredSize() {      return new Dimension(LS_WIDTH, LS_HEIGHT);   }   private static void createAndShowGui() {      linkedSliders2 mainPanel = new linkedSliders2();      Jframe frame = new Jframe("linkedSliders");      frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);      frame.getContentPane().add(mainPanel);      frame.pack();      frame.setLocationByPlatform(true);      frame.setVisible(true);   }   public static void main(String[] args) {      SwingUtilities.invokeLater(new Runnable() {         public void run() { createAndShowGui();         }      });   }}class SliderGroup2 {   private List<BoundedRangeModel> sliderModelList = new ArrayList<BoundedRangeModel>();   private ChangeListener changeListener = new SliderModelListener();   private int maxValueSum;   public SliderGroup2(int maxValueSum) {      this.maxValueSum = maxValueSum;   }   public void addSlider(JSlider slider) {      BoundedRangeModel model = slider.getModel();      sliderModelList.add(model);      model.addChangeListener(changeListener);   }   private class SliderModelListener implements ChangeListener {      private boolean internalChange = false;      @Override      public void stateChanged(ChangeEvent cEvt) {         if (!internalChange) { internalChange = true; BoundedRangeModel sourceModel = (BoundedRangeModel) cEvt.getSource(); int sourcevalue = sourceModel.getValue(); int oldSumOfOtherSliders = 0; for (BoundedRangeModel model : sliderModelList) {    if (model != sourceModel) {       oldSumOfOtherSliders += model.getValue();    } } if (oldSumOfOtherSliders == 0) {    for (BoundedRangeModel model : sliderModelList) {       if (model != sourceModel) {          model.setValue(1);       }    }    internalChange = false;    return; } int newSumOfOtherSliders = maxValueSum - sourcevalue; for (BoundedRangeModel model : sliderModelList) {    if (model != sourceModel) {       long newValue = ((long) newSumOfOtherSliders * model  .getValue()) / oldSumOfOtherSliders;       model.setValue((int) newValue);    } } int total = 0; for (BoundedRangeModel model : sliderModelList) {    total += model.getValue(); } //!! System.out.printf("Total = %.0f%n", (double)total * 100 / linkedSliders2.SLIDER_MAX_VALUE); internalChange = false;         }      }   }}

编辑为让SliderGroup2使用BoundedRangeModels列表而不是JSliders。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号