spo*_*dem 10 java user-interface swing
我有一个JSpinner显示从0.0到999.0的十进制值.它似乎工作正常,除了它在编辑器框中显示一个长度为四位数的数字,例如123.4; 然后它会切断部分最后一位数,因为它不够长.
所以我的问题是:有谁知道如何增加JSpinner编辑器窗口的长度?
谢谢!
Hov*_*els 12
你可以对文本字段这实际上是一个JFormattedTextField由
getEditor()JSpinner来获取微调器的编辑器JSpinner.DefaultEditorgetTextField()给这个.然后,如果需要,您可以设置它的preferredSize.编辑:正如trashgod所述,使用适当的布局是至关重要的,并确保您使用的布局是最好的可能是解决此问题的最佳方法.
编辑2: 以上是错误的,因为设置文本字段的首选大小什么都不做.但是,您可以设置编辑器本身的首选大小,这是有效的.例如.,
import java.awt.Dimension;
import javax.swing.*;
public class SpinnerBigTextField {
private static void createAndShowGui() {
JSpinner spinner = new JSpinner(new SpinnerNumberModel(0.0, 0.0, 999.0,
0.5));
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(300, 100));
panel.add(spinner);
JComponent field = ((JSpinner.DefaultEditor) spinner.getEditor());
Dimension prefSize = field.getPreferredSize();
prefSize = new Dimension(200, prefSize.height);
field.setPreferredSize(prefSize);
JFrame frame = new JFrame("SpinnerBigTextField");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Kin*_*das 12
第一个气垫船的答案一点也不差.您无法直接更改大小,但您可以执行以下操作:
JComponent editor = mySpinner.getEditor();
JFormattedTextField tf = ((JSpinner.DefaultEditor) editor).getTextField();
tf.setColumns(4);
Run Code Online (Sandbox Code Playgroud)
您可以在哪里定义编辑器显示的列数.它会改变微调器的大小.
由于FontMetrics从一个平台变化到下一个,最好是依靠组件自己的首选大小的计算.此示例显示了JSpinner各种值min和max值的大小范围.特别要注意FlowLayout"让每个组件都采用其自然(首选)大小."

import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
/** @see http://stackoverflow.com/questions/7374659 */
public class SpinnerTest extends Box {
private static final double STEP = 0.1d;
private static final String FORMAT = "0.0000000000";
public SpinnerTest(int axis) {
super(axis);
for (int i = 0; i < 8; i++) {
int v = (int) Math.pow(10, i);
this.add(genParamPanel((i + 1) + ":", -v, v));
}
}
private JPanel genParamPanel(String name, double min, double max) {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.TRAILING));
JLabel label = new JLabel(name, JLabel.TRAILING);
JSpinner js = new JSpinner(new SpinnerNumberModel(min, min, max, STEP));
js.setEditor(new JSpinner.NumberEditor(js, FORMAT));
panel.add(label);
panel.add(js);
return panel;
}
private void display() {
JFrame f = new JFrame("SpinnerTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new SpinnerTest(BoxLayout.Y_AXIS).display();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8146 次 |
| 最近记录: |