Java JSpinner焦点问题
我在Mac OS X上使用默认的外观。我创建了一个JSpinner,并在其关联的TextField对齐、颜色、不可编辑上设置了一些属性。旋转器工作正常;它有焦点,但并不表明它有焦点。也就是说,指示焦点的蓝色浅绿色L&F轮廓不存在。如果删除指定的代码部分,微调器将正确显示,显示它具有焦点,但我需要的属性不可用 我已经用Nimbus L&F运行了这个程序,所有东西都显示正确——属性和焦点都存在。但我需要苹果默认的aqua L&F。如果这是一个L&F问题,而不是我做错了什么,有没有其他方法可以让焦点正确显示Java JSpinner焦点问题,java,macos,swing,look-and-feel,jspinner,Java,Macos,Swing,Look And Feel,Jspinner,我在Mac OS X上使用默认的外观。我创建了一个JSpinner,并在其关联的TextField对齐、颜色、不可编辑上设置了一些属性。旋转器工作正常;它有焦点,但并不表明它有焦点。也就是说,指示焦点的蓝色浅绿色L&F轮廓不存在。如果删除指定的代码部分,微调器将正确显示,显示它具有焦点,但我需要的属性不可用 我已经用Nimbus L&F运行了这个程序,所有东西都显示正确——属性和焦点都存在。但我需要苹果默认的aqua L&F。如果这是一个L&F问题,而不是我做错了什么,有没有其他方法可以让焦点正
import java.awt.Color;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.JTextField;
public class SpinnerTest {
public static void main(String[] args) {
JSpinner spinner = new JSpinner();
final JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(spinner);
// Comment out this section to see focus set properly
JComponent editor = spinner.getEditor();
JSpinner.DefaultEditor spinnerEditor = (JSpinner.DefaultEditor)editor;
spinnerEditor.getTextField().setHorizontalAlignment(JTextField.CENTER);
spinnerEditor.getTextField().setForeground(Color.GREEN);
spinnerEditor.getTextField().setEditable(false);
spinnerEditor.getTextField().requestFocusInWindow();
// End of this section
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
spinnerEditor.getTextField.requestFocusInWindow;形成文档。如果此组件的顶级祖先已经是焦点窗口,则请求此组件获取输入焦点。如果帧还不可见,它肯定不是聚焦窗口。@Andrew,该行可以从代码中删除,程序仍然运行相同:作为帧上的第一个也是唯一一个对象,它确实获得了正确的聚焦,但没有显示它具有聚焦。当这种情况发生在一个大程序中时,用户不知道焦点在哪里;是的,我知道你其余的评论。但这可能是有用的进一步信息。对于其他人:很抱歉,我没有运行OSX,因此无法在此处真正测试它。顺便问一下,OSX的“默认”PLAF是什么?是水族原生格子呢还是金属呢?顺便说一句,如果你把spinnerEditor.getTextField.setHorizontalAlignmentJTextField.CENTER注释掉,我猜这种情况还是会发生的;spinnerEditor.getTextField.setForegroundColor.GREEN;?setEditablefalse呢;正如现在删除的答案中所建议的那样?@Andrew-我使用的是Aqua原生PLAF,我认为这是OS X的默认设置。对于CENTER和GREEN,这种情况仍然存在-spinner有焦点,但没有显示有焦点。使用seteditablecommented out或setEditabletrue时,会显示焦点,但我只希望微调器或键盘上的箭头键工作,因此我将其设置为false。