Why is the tab-order "backwards" when tabbing over Java components inside a JPanel?

4 Ansichten (letzte 30 Tage)
function 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

Antworten (1)

the cyclist
the cyclist am 7 Aug. 2013
I don't know much about MATLAB GUIs, much less Java-based ones, but maybe this page will shed some light?
  1 Kommentar
Corbin Holland
Corbin Holland am 7 Aug. 2013
Bearbeitet: Corbin Holland am 7 Aug. 2013
Thanks for the quick response but unfortunately no it doesn't help me in this case. I have written an equivalent snippet using only matlab controls (uicontrol and uipanel) and it tabs as it should. I just need to understand why the FocusTraversalPolicy (of the figure) acts in such a bizarre manner when tabbing over a JPanel. I thought the uipanel was based on a JPanel underneath the hood. Apparently something is different :(
On a side note if I create a gui in the exact same way inside of a JFrame it tabs as it should as well. Its only when I add it to a matlab figure (using javacomponent) that this behavior rears its ugly head.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by