0

通过运行这个 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
4

0 回答 0