2015-02-13 2 views
1

Я работаю с JSlider, но когда я выполняю свое приложение, JSlider рисуется незавершенно.JSlider не заполнен, Работа с Netbeans

Design Время использования JSlider

Design Time using JSlider

Мой Java код, чтобы изменить значение, представленное:

//The first JSlider jsDur (170, 180, 190, 200) 
Enumeration ed = jsDur.getLabelTable().keys(); 
while (ed.hasMoreElements()) { 
    Integer i = (Integer) ed.nextElement(); 
    JLabel label = (JLabel) jsDur.getLabelTable().get(i); 
    Double d = (double)i/10.0; 
    label.setText(String.valueOf(i/10)); 
} 

//The second JSlider jsAmp (26000, 28000, 30000) 
Enumeration ea = jsAmp.getLabelTable().keys(); 
while (ea.hasMoreElements()) { 
    Integer i = (Integer) ea.nextElement(); 
    JLabel label = (JLabel) jsAmp.getLabelTable().get(i); 
    Integer a = (int)Math.pow(2.0, (double)i/2000.0); 
    label.setText(a.toString()); 
} 

Время выполнения с помощью JSlider

Execution Time using JSlider

Проверьте jsDur со значением = 20 !!, но с использованием шрифта по умолчанию ... как jsDur, потому что я изменил шрифт jsAmp, чтобы избежать этой проблемы, но не решен.

Вопрос 2

Как Aling (слева и справа, так же велико, и такое же положение для различных JSlider-х)? Пожалуйста, проверьте изображения ...

Полного изображения во время разработки

Full Image in Design Time

Полного изображения в Исполнительном Time

Full Image in Executing Time

EDIT 1 Вариант 2 Полных Код:

package JA_JF_JComboBox; 

import java.util.Enumeration; 
import javax.swing.JLabel; 
public class JF_Test_JComboBox extends javax.swing.JFrame { 

    public JF_Test_JComboBox() { 
    initComponents(); 
    Enumeration ed = jsDur.getLabelTable().keys(); 
    while (ed.hasMoreElements()) { 
     Integer i = (Integer)ed.nextElement(); 
     JLabel label = (JLabel)jsDur.getLabelTable().get(i); 
     Double d = (double)i/10.0; 
     label.setText(String.valueOf(i/10)); 
    } 
    Enumeration ea = jsAmp.getLabelTable().keys(); 
    while (ea.hasMoreElements()) { 
     Integer i = (Integer)ea.nextElement(); 
     JLabel label = (JLabel)jsAmp.getLabelTable().get(i); 
     Integer a = (int)Math.pow(2.0, (double)i/2000.0); 
     label.setText(a.toString()); 
    } 
    } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

    jpMake = new javax.swing.JPanel(); 
    jpDur = new javax.swing.JPanel(); 
    jsDur = new javax.swing.JSlider(); 
    jpAmp = new javax.swing.JPanel(); 
    jsAmp = new javax.swing.JSlider(); 
    jpT = new javax.swing.JPanel(); 
    jsT = new javax.swing.JSlider(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jpDur.setBackground(new java.awt.Color(255, 255, 255)); 
    jpDur.setPreferredSize(new java.awt.Dimension(1628, 56)); 

    jsDur.setMajorTickSpacing(10); 
    jsDur.setMaximum(200); 
    jsDur.setMinorTickSpacing(2); 
    jsDur.setPaintLabels(true); 
    jsDur.setPaintTicks(true); 
    jsDur.setSnapToTicks(true); 
    jsDur.setToolTipText(""); 
    jsDur.setName(""); // NOI18N 

    javax.swing.GroupLayout jpDurLayout = new javax.swing.GroupLayout(jpDur); 
    jpDur.setLayout(jpDurLayout); 
    jpDurLayout.setHorizontalGroup(
     jpDurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpDurLayout.createSequentialGroup() 
     .addGap(108, 108, 108) 
     .addComponent(jsDur, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     .addContainerGap()) 
    ); 
    jpDurLayout.setVerticalGroup(
     jpDurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jpDurLayout.createSequentialGroup() 
     .addComponent(jsDur, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
     .addContainerGap()) 
    ); 

    jpAmp.setBackground(new java.awt.Color(255, 255, 255)); 
    jpAmp.setFont(new java.awt.Font("Times New Roman", 0, 10)); // NOI18N 
    jpAmp.setPreferredSize(new java.awt.Dimension(1628, 56)); 

    jsAmp.setMajorTickSpacing(2000); 
    jsAmp.setMaximum(30000); 
    jsAmp.setMinorTickSpacing(1000); 
    jsAmp.setPaintLabels(true); 
    jsAmp.setPaintTicks(true); 
    jsAmp.setSnapToTicks(true); 
    jsAmp.setToolTipText(""); 
    jsAmp.setValue(30000); 
    jsAmp.setPreferredSize(new java.awt.Dimension(200, 45)); 

    javax.swing.GroupLayout jpAmpLayout = new javax.swing.GroupLayout(jpAmp); 
    jpAmp.setLayout(jpAmpLayout); 
    jpAmpLayout.setHorizontalGroup(
     jpAmpLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpAmpLayout.createSequentialGroup() 
     .addGap(108, 108, 108) 
     .addComponent(jsAmp, javax.swing.GroupLayout.DEFAULT_SIZE, 1193, Short.MAX_VALUE) 
     .addContainerGap()) 
    ); 
    jpAmpLayout.setVerticalGroup(
     jpAmpLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jpAmpLayout.createSequentialGroup() 
     .addComponent(jsAmp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
     .addGap(12, 12, 12)) 
    ); 

    jpT.setBackground(new java.awt.Color(255, 255, 255)); 
    jpT.setFont(new java.awt.Font("Times New Roman", 0, 10)); // NOI18N 

    jsT.setFont(new java.awt.Font("Times New Roman", 0, 10)); // NOI18N 
    jsT.setMajorTickSpacing(12); 
    jsT.setMaximum(128); 
    jsT.setMinorTickSpacing(1); 
    jsT.setPaintLabels(true); 
    jsT.setPaintTicks(true); 
    jsT.setSnapToTicks(true); 
    jsT.setToolTipText(""); 
    jsT.setValue(69); 
    jsT.setPreferredSize(new java.awt.Dimension(200, 45)); 

    javax.swing.GroupLayout jpTLayout = new javax.swing.GroupLayout(jpT); 
    jpT.setLayout(jpTLayout); 
    jpTLayout.setHorizontalGroup(
     jpTLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jpTLayout.createSequentialGroup() 
     .addGap(108, 108, 108) 
     .addComponent(jsT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     .addContainerGap()) 
    ); 
    jpTLayout.setVerticalGroup(
     jpTLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jpTLayout.createSequentialGroup() 
     .addGap(0, 0, 0) 
     .addComponent(jsT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
     .addContainerGap()) 
    ); 

    javax.swing.GroupLayout jpMakeLayout = new javax.swing.GroupLayout(jpMake); 
    jpMake.setLayout(jpMakeLayout); 
    jpMakeLayout.setHorizontalGroup(
     jpMakeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jpMakeLayout.createSequentialGroup() 
     .addGap(6, 6, 6) 
     .addGroup(jpMakeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
      .addComponent(jpAmp, javax.swing.GroupLayout.DEFAULT_SIZE, 1311, Short.MAX_VALUE) 
      .addComponent(jpDur, javax.swing.GroupLayout.DEFAULT_SIZE, 1311, Short.MAX_VALUE) 
      .addComponent(jpT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     .addGap(0, 70, Short.MAX_VALUE)) 
    ); 
    jpMakeLayout.setVerticalGroup(
     jpMakeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jpMakeLayout.createSequentialGroup() 
     .addGap(2, 2, 2) 
     .addComponent(jpDur, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE) 
     .addGap(28, 28, 28) 
     .addComponent(jpAmp, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE) 
     .addGap(2, 2, 2) 
     .addComponent(jpT, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE) 
     .addContainerGap(39, Short.MAX_VALUE)) 
    ); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 1413, Short.MAX_VALUE) 
     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addComponent(jpMake, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(0, 26, Short.MAX_VALUE))) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 206, Short.MAX_VALUE) 
     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addComponent(jpMake, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(0, 0, Short.MAX_VALUE))) 
    ); 

    pack(); 
    }    

    public static void main(String args[]) { 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
     if ("Nimbus".equals(info.getName())) { 
      javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
      break; 
     } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(JF_Test_JComboBox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(JF_Test_JComboBox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(JF_Test_JComboBox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(JF_Test_JComboBox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
     new JF_Test_JComboBox().setVisible(true); 
     } 
    }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JPanel jpAmp; 
    private javax.swing.JPanel jpDur; 
    private javax.swing.JPanel jpMake; 
    private javax.swing.JPanel jpT; 
    private javax.swing.JSlider jsAmp; 
    private javax.swing.JSlider jsDur; 
    private javax.swing.JSlider jsT; 
    // End of variables declaration     
} 
+2

Самое главное: Вы не используете 'макеты null' и' SetBounds (...) 'или любые звонки на' SetSize (...) 'или' setPreferredSize (...) 'вы? Создайте и опубликуйте небольшую/минимальную, но простую полную программу, которая иллюстрирует вашу проблему, [MCVE] (http://stackoverflow.com/help/mcve). Для получения подробной информации об этом очень полезном инструменте проверьте ссылку. –

+0

Thks, часть кода, только с одним JSlider ... –

+1

* «Часть кода» * Неискусственный фрагмент кода не является MCVE. Пожалуйста, перейдите по ссылке, предоставленной @HovercraftFullOfEels, и прочитайте об этом. –

ответ

0

Посмотрите на JSlider#updateLabelUIs() (Java Platform SE 8). Может быть, это помогает.

//@see javax/swing/JSlider.java 
public void updateUI() { 
    setUI((SliderUI)UIManager.getUI(this)); 
    // The labels preferred size may be derived from the font 
    // of the slider, so we must update the UI of the slider first, then 
    // that of labels. This way when setSize is called the right 
    // font is used. 
    updateLabelUIs(); 
} 

Вот моя попытка:

enter image description here

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

public class JFComboBoxTest { 
    public JComponent makeUI() { 
    JSlider jsDur = makeSlider(); 
    //jsDur.setLabelTable(jsDur.getLabelTable()); 
    //jsDur.updateUI(); 
    SwingUtilities.updateComponentTreeUI(jsDur); 

    Box p = Box.createVerticalBox(); 
    p.setBorder(BorderFactory.createLineBorder(Color.RED, 20)); 
    p.add(new JLabel("JSlider label size? (200 -> _20)")); 
    p.add(makeSlider()); 
    p.add(Box.createVerticalStrut(20)); 
    p.add(new JLabel("SwingUtilities.updateComponentTreeUI(slider)")); 
    p.add(jsDur); 
    return p; 
    } 
    private static JSlider makeSlider() { 
    JSlider jsDur = new JSlider(); 
    jsDur.setBackground(new Color(255, 255, 255)); 
    jsDur.setMajorTickSpacing(10); 
    jsDur.setMaximum(200); 
    jsDur.setMinorTickSpacing(2); 
    jsDur.setPaintLabels(true); 
    jsDur.setPaintTicks(true); 
    jsDur.setSnapToTicks(true); 
    Enumeration ed = jsDur.getLabelTable().keys(); 
    while (ed.hasMoreElements()) { 
     Integer i = (Integer) ed.nextElement(); 
     JLabel label = (JLabel) jsDur.getLabelTable().get(i); 
     Double d = (double)i/10.0; 
     label.setText(String.valueOf(i/10)); 
    } 
    return jsDur; 
    } 
    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override public void run() { 
     createAndShowGUI(); 
     } 
    }); 
    } 
    public static void createAndShowGUI() { 
    try { 
     //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { 
     if ("Nimbus".equals(laf.getName())) { 
      UIManager.setLookAndFeel(laf.getClassName()); 
     } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    f.getContentPane().add(new JFComboBoxTest().makeUI()); 
    f.setSize(512, 240); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    } 
} 
+0

Спасибо, ваш ответ работает ... Знаете ли вы ответ на вопрос 2? –