저는 0.0에서 999.0 사이의 10 진수 값을 표시하는 JSpinner가 있습니다. 123.4와 같이 4 자리 숫자의 편집기 상자에 숫자를 표시 할 때를 제외하고는 정상적으로 작동하는 것 같습니다. 그다음 길지 않아 마지막 자릿수의 일부가 잘립니다.JSpinner : 편집기 상자의 길이를 늘립니다.
제 질문은 : 누구든지 JSpinner 편집기 창 길이를 늘리는 방법을 알고 있습니까?
감사합니다.
저는 0.0에서 999.0 사이의 10 진수 값을 표시하는 JSpinner가 있습니다. 123.4와 같이 4 자리 숫자의 편집기 상자에 숫자를 표시 할 때를 제외하고는 정상적으로 작동하는 것 같습니다. 그다음 길지 않아 마지막 자릿수의 일부가 잘립니다.JSpinner : 편집기 상자의 길이를 늘립니다.
제 질문은 : 누구든지 JSpinner 편집기 창 길이를 늘리는 방법을 알고 있습니까?
감사합니다.
당신은 사실에있는 텍스트 필드에 얻을 수 JFormattedTextField
getTextField()
전화JSpinner.DefaultEditor
getEditor()
를 호출 이에. 원하는 경우 원하는 크기로 설정할 수 있습니다.편집 : trashgod에서 알 수 있듯이 적절한 레이아웃을 사용하는 것이 가장 중요하며 사용하는 레이아웃이 최선인지 확인하는 것이 아마도이 문제를 해결하는 가장 좋은 방법 일 것입니다.
편집 2 : 텍스트 필드의 기본 크기를 설정하면 아무 효과가 없습니다. 그러나 에디터 자체의 선호 크기를 설정할 수 있습니다. 예컨대., FontMetrics
으로
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();
}
});
}
}
선호 크기를 고려한 +1 ['BoxLayout'] (http://download.oracle.com/javase/7/docs/api/javax/swing/BoxLayout.html)은이 컨텍스트에서 특히 유용합니다. – trashgod
@Hovercraft 전체가 Eels가 아니라 귀하의 사람 agaist 귀하의 사람이 아니라 그냥 Rulles 반환합니다 PreferredSize 편집기에서 대부분의 경우 나는 4-5 숫자 possitions 있습니다 ... 또는 가능하다는 것을 알고 있다면 이것은 LayoutManager가 아닌 프로그래머를위한 직업이라고 생각합니다 음수 부호, 여전히 거기에 더하기 5-8 픽셀 수평 및 2-5 비 꼬인 모양을 위해 수직으로, JSpinner # setPreferredSize(), btw +1을 정확히 사용하지 않고 그것을 해결하는 방법 복합 JComponent의 구성 요소 – mKorbel
-1 에 대해 setXXSize – kleopatra
는 적절한 사이즈의 구성 요소의 자신의 계산에 의존하는 것이 좋습니다, 하나 개의 플랫폼에서 다음 다릅니다. 이 예는 다양한 min
및 max
값에 대한 JSpinner
크기의 스펙트럼을 보여줍니다. 특히 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();
}
});
}
}
첫 번째 호버의 대답은 전혀 좋지 않습니다. 사용자가 직접 크기를 변경할 수 없습니다,하지만 당신은 같은 것을 할 수 있습니다
JComponent editor = mySpinner.getEditor();
JFormattedTextField tf = ((JSpinner.DefaultEditor) editor).getTextField();
tf.setColumns(4);
에디터로 나타났다 열 번호를 정의 할 수 있습니다 곳. 스피너의 크기가 변경됩니다.
간단한 3- 라인 예를 들어 주셔서 감사합니다! 나는 이것을 위해 모든 곳을 찾고 있었다. – uyuyuy99
나를 위해 일하지 않는다. –
@ ivan.ukr downvote에 감사드립니다. 나는 많은 응용 프로그램에서이 코드를 정확히 실행하며 작동 중이다. 이 줄에 오류가 있습니까? – JorgeHortelano
스피너의 최대 값을 변경하면 큰 숫자를 수용하기 위해 텍스트 상자의 크기가 증가합니다. 최대 값을 크게하지 않으려면 @JorgeHortelano가 제안한 것이 좋습니다 ...
JComponent editor = mySpinner.getEditor(); JFormattedTextField tf = ((JSpinner.DefaultEditor) editor) .getTextField(); tf.setColumns (4);
스피너를 넣을 컨테이너의 레이아웃은 무엇입니까? an [sscce] (http://sscce.org/)가 이상적입니다. – trashgod
테스트했을 때 내 대답을 삭제 한 것이 틀렸어. –