我正在使用 JSlider,但是当我执行我的应用程序时,JSlider 绘制不完整。
使用 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 的执行时间
检查 jsDur 的值= 20!!,但使用默认字体...如 jsDur,因为我更改了 jsAmp 的字体以避免此问题,但没有解决。
问题2
如何调整(不同JSlider的左右、大小相同、位置相同)?请检查图像...
设计时的完整图像
执行时的完整图像
编辑 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
}
最佳答案
看看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();
}
这是我的尝试:
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);
}
}
关于java - JSlider 绘制不完整,与 Netbeans 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28491041/