То, что я хочу, как:Swing - кнопка блокируется «лапок строки» в JTabbedPane, где нет нет вкладки
Но кнопка должна быть интерактивными. Теперь, когда мой SSCCE, эта кнопка не может быть нажата. Но если я добавлю кнопку из этой области, например. установите y
границ этой кнопки на 0
, она больше не находится за «табуляцией» 10 и, таким образом, можно щелкнуть.
Итак:
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 этого метода [здесь] (http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#setComponentZOder (java.awt.Component,% 20int) сказано: «z-порядок определяет порядок окрашивания компонентов, последний компонент с наивысшими красками z-порядка и компонент с наименьшими красками z-порядка. Когда компоненты перекрываются, компонент с более низкие z-порядковые краски над компонентом с более высоким z-порядком. Но мы не знаем, что первый добавленный компонент имеет более низкий z-порядок. – FaithReaper
Имеет смысл для меня, что ZOrder увеличивается по мере добавления компонентов. Не знаете, сколько компонентов будет добавлено, чтобы вы не могли назначить самый высокий ZOrder. – camickr