は似ているが存在しないJTabbedPaneの、で「タブの行」によってブロックされています。 SSCCEではこのボタンをクリックできません。しかし、この領域からボタンを追加すると、たとえばこのボタンの境界のy
を0
に設定すると、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(詳細はこちら)(http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#setComponentZOrder(java.awt.Component、% 20int)は、次のように述べています。「zオーダーは、コンポーネントが塗りつぶされる順序を決定します。最も高いzオーダーの塗料が最初にあるコンポーネント、最も低いzオーダーの塗料が最後にあるコンポーネントです。より高いzオーダーのコンポーネントに比べてzオーダーの塗料を低くすることができます。しかし、最初に追加されたコンポーネントのzオーダーが低いことはわかりません – FaithReaper
コンポーネントを追加するとZオーダーが増加することがわかります。あなたが最高のZOrderを最初に割り当てることができないように、いくつのコンポーネントが追加されるのか分かりません。 – camickr