0
我要的是像“选项卡行”受阻。现在用我的SSCCE,这个按钮不能被点击。但是,如果我在该区域添加按钮,例如将此按钮的边界的y
设置为0
,它不在JTabbedPane
的“选项卡行”之后,因此可以点击。摇摆按钮通过在JTabbedPane中,在没有标签
所以:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class MigLayoutWithJTabbedPaneButton extends JFrame {
public MigLayoutWithJTabbedPaneButton() {
begin();
}
private void begin() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null);
JTabbedPane tabsPane = new JTabbedPane();
tabsPane.setBounds(20, 20, 300, 400);
panel.add(tabsPane);
JLayeredPane tab = new JLayeredPane();
tab.setLayout(new MigLayout("insets 2 2 2 2, fillx, debug", "[]5[]5[]", "[]5[]"));
JButton button1 = new JButton("In the grid");
JButton button2 = new JButton("Out of the grid");
ActionListener ls = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(MigLayoutWithJTabbedPaneButton.this, "This can be clicked. ");
}
};
button1.addActionListener(ls);
button2.addActionListener(ls);
tab.add(button1, "cell 0 0, grow");
tabsPane.addTab("This is a tab", tab);
button2.setBounds(200, 20, 80, 20);
panel.add(button2);
getContentPane().add(panel);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutWithJTabbedPaneButton frame = new MigLayoutWithJTabbedPaneButton();
}
});
}
}
为什么?这不是理想的行为。 “标签行”不应该阻止任何元素,如果他们在标签的相同高度,但没有任何实际的标签在他们面前。
'我重读了Oracle DOC,并且确定它没有被任何地方提及!' - 这个行为在'Container.setComponentZOrder(...)'方法中定义。 – camickr
根据此方法的API中的详细信息[here](http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#setComponentZOrder(java.awt.Component,%它说:“z顺序决定了组件的排列顺序;具有最高z顺序的组件和最低z顺序的组件在最后一个组件中重叠,组件与更低z顺序的颜料在z-顺序更高的组件上。“但我们不知道第一个添加的组件具有更低的z顺序。 – FaithReaper
ZOrder随着添加组件而增加。不知道将添加多少组件,因此您无法首先分配最高的ZOrder。 – camickr