通过运行这个 matlab 代码示例并在组件中切换,您可以看到遍历 matlab 图(添加了 javacomponent)上的 Java 组件的行为与预期不同。请,如果有人对如何使标签顺序正常运行有任何见解,我将不胜感激:)
function hfig = testJavaFocus
% Illustration of tab-order focus problem.
% Run this and start hitting tab. Observe that tab-order goes "backwards"
% when traversing through the components in the JPanel. WHY!!!??!?!?!?
hfig = figure;
components = [];
%% Add JTextField
text = javaObjectEDT('javax.swing.JTextField',6);
text.setFocusable(true);
components{end+1} = text;
%% Add JTextField
text = javaObjectEDT('javax.swing.JTextField',6);
text.setFocusable(true);
components{end+1} = text;
%% Add JPanel - we will add 3 components to this panel to illustrate focus problem
panel = javaObjectEDT('javax.swing.JPanel');
panel.setBackground(java.awt.Color.GREEN);
text = javaObjectEDT('javax.swing.JTextField',6);
text.setFocusable(true);
panel.add(text);
text = javaObjectEDT('javax.swing.JTextField',6);
text.setFocusable(true);
panel.add(text);
text = javaObjectEDT('javax.swing.JTextField',6);
text.setFocusable(true);
panel.add(text);
components{end+1} = panel;
%% Add JTextField
text = javaObjectEDT('javax.swing.JTextField',6);
text.setFocusable(true);
components{end+1} = text;
%% Add JTextField
text = javaObjectEDT('javax.swing.JTextField',6);
text.setFocusable(true);
components{end+1} = text;
%% Add all components to the figure via javacomponent()
x = 10;
padding = 3;
for i = 1:length(components)
prefDim = components{i}.getPreferredSize();
widpos = [x,10,prefDim.width,prefDim.height];
[jh, hg] = javacomponent(components{i},widpos,hfig);
x = x + prefDim.width + padding;
end
end