

javaのswingでパネルにラベルを座標指定で設定したいのですがわかりません。  
コードも込みで教えていただけるとありがたいです。

[code]

    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.*;
    
    import javax.swing.*;
    import javax.swing.border.LineBorder;
    
    public class Layout5 extends JFrame {
        JLabel label1;
        JLabel label2;
        JLabel label3;
        JLabel label4;
        JPanel panel1;
        JPanel panel2;
        JPanel panel3;
        CardLayout layout;
    
        public static void main(String[] args) {
            Layout5 frame = new Layout5("例");
            frame.setVisible(true);
        }
    
        Layout5(String title) {
            setTitle("例");
            setBounds(100, 100, 250, 300);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            label1 = new JLabel("1");
            panel1 = new JPanel();
            label1.setBorder(new LineBorder(Color.blue, 2, true));
            panel1.setPreferredSize(new Dimension(200,100));
            label1.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    layout.show(getContentPane(), "panel2");
                }
            });
            //座標指定
            Dimension d = label1.getPreferredSize();
            label1.setBounds(50, 100, d.width, d.height);
            panel1.add(label1);
    
            panel2 = new JPanel();
            label2 = new JLabel("2");
            label2.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    layout.show(getContentPane(), "panel3");
                }
            });
            panel2.add(label2);
    
            panel3 = new JPanel();
            label3 = new JLabel("3");
            label3.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    layout.show(getContentPane(), "panel1");
                }
            });
            panel3.add(label3);
    
            label4 = new JLabel("4");
            label4.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    layout.show(getContentPane(), "panel3");
                }
            });
            panel1.add(label4);
            label4.setBorder(new LineBorder(Color.blue, 2, true));
    
            layout = new CardLayout();
    
            Container contentPane = getContentPane();
            contentPane.setLayout(layout);
    
            JScrollPane scrollpane1 = new JScrollPane(panel1);
            scrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            scrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    
            JScrollPane scrollpane2 = new JScrollPane(panel2);
            scrollpane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            scrollpane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    
            JScrollPane scrollpane3 = new JScrollPane(panel3);
            scrollpane3.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            scrollpane3.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            panel3.setPreferredSize(new Dimension(1000,1000) );
    
            contentPane.add(scrollpane1,"panel1");
            contentPane.add(scrollpane2, "panel2");
            contentPane.add(scrollpane3, "panel3");
        }
    
    }
    
[/code]


CC BY-SA 4.0
2019-08-28T16:38:48.800
57663
2021-12-18T17:02:55.257
2019-08-29T14:14:51.883
3060
35634
question
java swing
swing　パネルにラベルを付ける際に座標を指定して付ける方法


`JPanel`の[`setLayout`](https://www.javadrive.jp/tutorial/nulllayout/index1.html)メソッドまたは[コンストラクタ](https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JPanel.html#constructor.summary)の引数に`null`を指定することで絶対座標にコントロールを配置できます。

* * *

Javaのどの段階でつまずいているのかわかりません。  
コードも込みで質問していただけると回答する時に下記が判断できてありがたいです。

  * JPanelの[レイアウトマネージャ](https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)は分かるでしょうか。
  * JPanelのsetLayout(null)とJLabelのsetBoundまではできているけれど、setSizeしていなくて表示されない([英語の類似質問](https://stackoverflow.com/q/14309837))のでしょうか。
  * JLayeredPaneを使って[柔軟にレイアウトを指定](https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html)したいのでしょうか。
  * Javaに興味がなくて課題を丸投げしたいのでしょうか。

いじわるな回答になってしまいましたが、動作しないものであっても作成中のコードやエラーを質問文に含んでいただくと、より的確な回答が得やすいと思います。  
どうぞ今後同様の質問をされる際には、質問文のご検討をお願い申し上げます。

[code]

    import javax.swing.*;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    
    public class NullLayoutFrame extends JFrame{
        public NullLayoutFrame() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JPanel panel = new JPanel(null);  // レイアウトマネージャを指定しないコンストラクタ
            // setLayoutでレイアウトマネージャをnullにする場合は、上記を消して下記2行を有効にすること
            //JPanel panel = new JPanel();
            //panel.setLayout(null);
    
            JLabel label = new JLabel("Absolute bounds.");
            Dimension d = label.getPreferredSize();
            label.setBounds(50, 100, d.width, d.height);    // ラベルを座標指定で設定する
    
            panel.add(label);
    
            getContentPane().add(panel, BorderLayout.CENTER);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    NullLayoutFrame frame = new NullLayoutFrame();
                    frame.setBounds(10, 10, 300, 200);
                    frame.setVisible(true);
                }
            });
        }  
    }
    
[/code]


CC BY-SA 4.0
2019-08-29T02:02:30.023
57669
2019-08-29T02:02:30.023
9820
57663
answer