1

基本的に背景( Paint() を使用してペイントされる)を持つプログラムを作成し、その上に画像を含むラベルを配置しようとしています。

ペイントの下に JLabel を取得し続けます...

何か案は?

よろしくお願いします。


public class GUI extends JFrame {

    JPanel menuBar = new JPanel();
    JButton button1 = new JButton("Press Me");
    JLayeredPane layeredPane = new JLayeredPane();
    private ImageIcon image1;
    private static JLabel label1;

    public GUI() {
        super("Add a profile");

        setLayout(null);

        try {
            image1 = new ImageIcon(getClass().getResource(
                    "Images/location.PNG"));
        } catch (Exception e) {
            System.out.println("Image not found!");
        }
        label1 = new JLabel(image1);
        label1.setBounds(new Rectangle(new Point(262, 94), label1.getPreferredSize()));
        label1.setLocation(1, 1);
        label1.setSize(114, 105);
        add(label1);
    }

    public void paint(Graphics g) {
        paintComponents(g);
        Graphics2D g2d = (Graphics2D) g;

        // Menu Bar
        g2d.setColor(Color.BLACK);
        g2d.drawRect(60, 93, 190, 373);
        g2d.setColor(Color.GRAY);
        g2d.fillRect(61, 94, 189, 372);

        // Background box
        g2d.setColor(Color.BLACK);
        g2d.drawRect(281, 106, 560, 360);
        g2d.setColor(Color.GRAY);
        g2d.fillRect(282, 107, 559, 359);
    }

    public static void main(String[] args) {
        GUI gui = new GUI();
        gui.setVisible(true);
        gui.setSize(900, 550);
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setResizable(false);
        gui.setLocationRelativeTo(null);

    }

}

悲しいことに、それを機能させることはできません。とにかくたくさんありがとう ごめん!今から見てみます

本当に感謝しています!

4

1 に答える 1

2

あなたのコードの見た目から、あなたは他のコンテナの仕事をするためにペイントを使用しようとしています。私は提案します、しないでください。

paintのようなトップレベルのコンテナのメソッドをオーバーライドしないでくださいJFrame。これらのメソッドは、それを乱雑にするための非常に重要な作業を行います。フレームには、通常、作業のいずれかを廃止するために、それらの上にすでにいくつかのコンポーネントが配置されています。

代わりに、自分自身にカスタムコンポーネント(のようなものから拡張JPanel)を作成し、代わりにそのメソッドを使用してpaintComponentから、これをフレームに追加します。

あなたの場合、コンポーネントの背景と境界線を変更することで逃げることができ、同じ結果が得られます。

更新しました

ここに画像の説明を入力してください

いくつかの基本的なレイアウトといくつかのコンポーネントで、これを作成することができました...

public class BadPaint {

    public static void main(String[] args) {
        new BadPaint();
    }

    public BadPaint() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new MenuPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class MenuPane extends JPanel {

        public MenuPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.weighty = 1;
            gbc.fill = GridBagConstraints.VERTICAL;
            gbc.insets = new Insets(10, 10, 10, 10);

            BackgroundPane left = new BackgroundPane();
            left.setLayout(new BorderLayout());
            JLabel label = new JLabel(" Menu ");
            label.setHorizontalAlignment(JLabel.CENTER);
            label.setVerticalAlignment(JLabel.CENTER);
            left.add(label);
            add(left, gbc);

            gbc.gridx++;
            gbc.weighty = 0;
            gbc.weightx = 1;
            gbc.fill = GridBagConstraints.BOTH;
            gbc.insets = new Insets(40, 10, 40, 10);
            BackgroundPane right = new BackgroundPane();
            right.setLayout(new BorderLayout());
            label = new JLabel(" Content ");
            label.setHorizontalAlignment(JLabel.CENTER);
            label.setVerticalAlignment(JLabel.CENTER);
            right.add(label);
            add(right, gbc);

        }

    }

    public class BackgroundPane extends JPanel {

        public BackgroundPane() {
            setBackground(Color.GRAY);
            setBorder(new LineBorder(Color.BLACK));
        }

    }

}

読み通すことでメリットが得られることをお勧めします

于 2012-11-15T02:35:53.747 に答える