0

最初のコードがJPanelの周囲に境界線を配置しないのに、2番目のコードは境界線を配置しないのはなぜですか?ボーダーのコードに違いは見当たりません。最初のものでは、私はヘビに取り組んでいます。2つ目は、ここに投稿するために書いた例ですが、うまくいったことがわかりました。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class ts {


public static void main(String[] args) {

        MyJFrame frame1 = new MyJFrame();

    }
    static class MyJFrame extends JFrame{

        public MyJFrame (){

            setTitle("Snake Build: Dev 0.2");
            setBounds(200,100,600,500);
            setResizable(false);
            setLayout(null);

            Container cp = getContentPane();

            JPanel settings = new JPanel();
            settings.setBounds(200, 100, 200, 200);
            settings.setBorder(BorderFactory.createRaisedBevelBorder());
            //exsists but cant be seen border working?
            settings.addMouseListener(new MouseListener(){
                @Override
                public void mouseClicked(MouseEvent arg0) {
                }

                @Override
                public void mouseEntered(MouseEvent arg0) {
                    System.out.println("entered");
                }

                @Override
                public void mouseExited(MouseEvent arg0) {
                    System.out.println("exited");
                }

                @Override
                public void mousePressed(MouseEvent arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void mouseReleased(MouseEvent arg0) {
                    // TODO Auto-generated method stub

                }
            });

            cp.add(settings);
            settings.setVisible(true);

            JButton test = new JButton("test");
            test.setBounds(10, 20, 30, 30);
            settings.add(test);
            test.setVisible(true);

            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }

        public void paint(Graphics g)
        {

        }
    }
}

ボーダーを与える2番目のピース

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class ts {
    public static void main(String[] args) {

        MyJF frame1 = new MyJF();

    }
    static class MyJF extends JFrame{
        public MyJF(){
            setBounds(50,50,500,200);
            setLayout(null);
            setResizable(false);

            Container cp = getContentPane();

            JPanel settings = new JPanel();
            settings.setBounds(20,20,100,100);
            settings.setBorder(BorderFactory.createRaisedBevelBorder());

            JButton JB = new JButton("hey");
            JB.setBounds(10, 10, 50, 50);
            settings.add(JB);

            add(settings);

            settings.setVisible(true);

            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }

}
4

1 に答える 1

3

明白なことを述べたくはありませんがJFrame.paint(Graphics)、空のコードブロックでオーバーライドしているため、問題が発生します。その部分を削除すると、期待どおりに機能します。

次の推奨事項を検討してください。

  • カスタムペイント用に含まれているコンポーネントJFrame.paint(Graphics)をオーバーライドするのではなく、オーバーライドします。どちらの場合も、通常はメソッドも呼び出す必要がありますJComponent.paintComponent(Graphics)JFramesuper
  • 適切なを使用LayoutManagerし、忘れてくださいsetBounds/setLocation/setSize(そしてそれらをに置き換えようとしないでくださいset-Min/Max/Pref-Size
  • Javaの命名規則に従います(クラスは大文字で始まります)
  • JFrame不要な場合は延長しないでください。JFrameフレーム動作を追加する場合にのみ拡張する必要があります
于 2012-10-31T13:40:32.710 に答える