2

JPanel を拡張する 2 つの異なるクラスからの 2 つの画像を並べて表示したいと考えています。

私が抱えている問題は、2 つの JPanels が JFrame 内にある必要がありますが、framename.add(panel) を実行すると、2 つを並べて追加するのではなく、もう一方を置き換えることです。

メインクラス内にフローレイアウトやその他のレイアウトを追加しようとしましたが、画像が表示されませんでした。

私の質問は、Jpanel を拡張する 2 つのクラスがある場合、これらの 2 つのパネルを Jframe 内に追加して、他のパネルを置き換えずに (互いに隣り合って) 並べるにはどうすればよいですか?

どんな提案でも大歓迎です。

編集:JFrameをクラスに拡張すると、そのクラスは自動的にJPanel自体になりますか? extends の意味は知っていますが、Jframe に関してどのように機能するかはわかりません。

Main.java

import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class Main
{       
public static void main(String[] args) 
    {        
        JFrame frame = new JFrame();           

        Panel1 s = new Panel1(); //picture 1
        Panel2 n = new Panel2(); //picture 2

        frame.add(n);
        frame.add(s); //here is the problem, it replaces the previous panel

        f.setSize(200,100);
        f.setLocation(0,400);                    
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Panel1.java

import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class image2 extends JPanel 
    {
        ImageIcon anotherIcon;

        public image2() //constructor
            {                               
                 URL imageURL = Panel1.class.getResource("images/puppy.png");            
                 anotherIcon = new ImageIcon(imageURL);
            }

        public void paint(Graphics g)
            {
                super.paintComponent(g);                
                anotherIcon.paintIcon(this, g, 0, 0);                           
            }       
    }

Panel2.java

import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class Panel2 extends JPanel 
    {
        ImageIcon anotherIcon2;

        public Panel2() //constructor
            {                               
                 URL imageURL = Panel2.class.getResource("images/puppy2.png");           
                 anotherIcon = new ImageIcon(imageURL);
            }

        public void paint(Graphics g)
            {
                super.paintComponent(g);                
                anotherIcon2.paintIcon(this, g, 0, 0);                          
            }       
    }
4

7 に答える 7

2

JPanel を拡張する 2 つの異なるクラスからの 2 つの画像を並べて表示したいと考えています。

また

于 2013-02-28T09:42:48.300 に答える
0

パネルをJFrameに直接追加する場合は、contentPaneにパネルを追加する必要があります。

また、contentPaneframe.setContentPane(myPanel); となるパネルを作成し、いくつかのレイアウト(BorderLayout、GridBagLayoutなど)で構成することをお勧めします。

于 2013-02-28T10:06:22.733 に答える
0

フレーム内で FlowLayout() を設定

frame.setLayout(新しい FlowLayout());

于 2013-02-28T10:12:09.937 に答える
0

GridBagLayoutPanel1.java と Panel2.java の軽微なミスを修正し、 /GridBagConstraintsコンボを使用して並べて配置する方法の例を追加しました。

Main.java

import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class Main {
    public static void main(String[] args) {
            GridBagConstraints gbc = new GridBagConstraints();

            JFrame frame = new JFrame();
            frame.setLayout(new GridBagLayout());
            Panel1 s = new Panel1(); //picture 1

            Panel2 n = new Panel2(); //picture 2

            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.gridwidth = 1;
            gbc.weightx = 1;
            gbc.weighty = 1;
            gbc.fill = GridBagConstraints.BOTH;
            frame.add(n, gbc);

            gbc.gridx = 1;
            gbc.gridy = 0;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            frame.add(s, gbc); //here is the problem, it replaces the previous panel

            frame.setSize(200,100);
            frame.setLocation(0,400);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       }
    }

Panel1.java

    import javax.swing.*;
    import java.awt.*;
    import java.net.URL;

    public class Panel1 extends JPanel {
        ImageIcon anotherIcon;

        public Panel1 ( ) {
            URL imageURL = Panel1.class.getResource("images/puppy.png");
            anotherIcon = new ImageIcon(imageURL);
        }

        public void paint(Graphics g) {
            super.paintComponent(g);
            anotherIcon.paintIcon(this, g, 0, 0);
        }
    }

Panel2.java

    import javax.swing.*;
    import java.awt.*;
    import java.net.URL;

    public class Panel2 extends JPanel {
        ImageIcon anotherIcon;

        public Panel2 ( ) {
            URL imageURL = Panel2.class.getResource("images/puppy2.png");
            anotherIcon = new ImageIcon(imageURL);
        }

        public void paint(Graphics g) {
            super.paintComponent(g);
            anotherIcon.paintIcon(this, g, 0, 0);
        }
    }

コードの一般的な考え方は間違っていませんでした。パネルが上下に配置され、一方が他方を隠していたというだけです....

于 2013-02-28T10:18:51.293 に答える
0

これを試すことができます。フレームのレイアウトを setLayout(null)として設定 すると、パネルに境界を追加できます。setBounds() そして、これらのパネルをフレームに追加します

于 2013-04-24T14:57:16.377 に答える