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