Java JPanel图纸不工作

Java JPanel图纸不工作,java,swing,jframe,jpanel,draw,Java,Swing,Jframe,Jpanel,Draw,我试图在JFrame上绘制一个矩形,网格布局中填充了JPanel。但是,矩形是在JPanel下绘制的,因此我可以看到JPanel相交的颜色。有没有一种方法可以指定“带到前台”之类的东西 这是我的密码: import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.*; import javax.swing.*; public class TestComponentAt extends

我试图在JFrame上绘制一个矩形,网格布局中填充了JPanel。但是,矩形是在JPanel下绘制的,因此我可以看到JPanel相交的颜色。有没有一种方法可以指定“带到前台”之类的东西

这是我的密码:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.*;
import javax.swing.*;

public class TestComponentAt extends JPanel {
   private static final int ROW_COUNT = 8;
   private static final int W = 60;
   private static final int H = W;
   private static final Dimension PREF_SIZE = new Dimension(W, H);
   private JFrame frame = new JFrame();

   public TestComponentAt() {
      setLayout(new GridLayout(ROW_COUNT, ROW_COUNT, 1, 1));
      setBackground(Color.black);
      for (int i = 0; i < ROW_COUNT * ROW_COUNT; i++) {
         JPanel panel = new JPanel();
         String name = String.format("[%d, %d]", 
               i / ROW_COUNT, i % ROW_COUNT);
         panel.setName(name);
         if ((i/ROW_COUNT) % 2 == (i%ROW_COUNT) % 2) {
            panel.setBackground(Color.black);
         }
         panel.setPreferredSize(PREF_SIZE);
         int row = i/ROW_COUNT;
         add(panel);
         if (panel.getBackground() == Color.black  &&  (row <= 2 || row >= 5)){
             repaint();
         }
      }
      addMouseListener(new MouseAdapter() {
         @Override
         public void mousePressed(MouseEvent e) {
            JPanel panel = (JPanel) getComponentAt(e.getPoint());
            if (panel == null || panel == TestComponentAt.this) {
               return;
            }
            if (panel != null) {
               panel.removeAll();
               panel.revalidate();
               panel.repaint();
            }
            panel.add(new JLabel(panel.getName()));
            panel.revalidate();
            panel.repaint();
         }
      });
   }
   public void paintComponent(Graphics g){
        System.out.println("this has been called");
        super.paintComponent(g);
        g.setColor(Color.pink);
        g.fillOval(100, 100, 100, 100);
   }
   private void createAndShowGui() {
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(480, 480);
      frame.getContentPane().add(new TestComponentAt());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
       TestComponentAt obj = new TestComponentAt();
       obj.createAndShowGui();
   }
}
import java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.*;
导入javax.swing.*;
公共类TestComponentAt扩展了JPanel{
私有静态最终整数行计数=8;
专用静态最终int W=60;
专用静态最终int H=W;
专用静态最终尺寸PREF_SIZE=新尺寸(W,H);
私有JFrame=新JFrame();
公共TestComponentAt(){
setLayout(新的GridLayout(行数,行数,1,1));
挫折背景(颜色:黑色);
对于(int i=0;i<行计数*行计数;i++){
JPanel面板=新的JPanel();
String name=String.format(“[%d,%d]”,
i/行数,i%行数);
panel.setName(名称);
如果((i/行计数)%2==(i%行计数)%2){
面板.立根背景(颜色.黑色);
}
面板。设置首选尺寸(首选尺寸);
int row=i/行计数;
添加(面板);
if(panel.getBackground()==Color.black&&(row=5)){
重新油漆();
}
}
addMouseListener(新的MouseAdapter(){
@凌驾
公共无效鼠标按下(MouseEvent e){
JPanel面板=(JPanel)getComponentAt(e.getPoint());
if(panel==null | | panel==TestComponentAt.this){
返回;
}
如果(面板!=null){
panel.removeAll();
panel.revalidate();
panel.repaint();
}
添加(新的JLabel(panel.getName());
panel.revalidate();
panel.repaint();
}
});
}
公共组件(图形g){
System.out.println(“这已被调用”);
超级组件(g);
g、 setColor(颜色为粉红色);
g、 圆形(100100100100);
}
私有void createAndShowGui(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
帧设置大小(480480);
frame.getContentPane().add(新的TestComponentAt());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
TestComponentAt obj=新的TestComponentAt();
obj.createAndShowGui();
}
}

JLayer可用于绘制JPanel及其组件。例如:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.*;

import javax.swing.*;
import javax.swing.plaf.LayerUI;

public class TestComponentAt extends JPanel {
    private static final int ROW_COUNT = 8;
    private static final int W = 60;
    private static final int H = W;
    private static final Dimension PREF_SIZE = new Dimension(W, H);
    private static final Color TRANSLUCENT_PINK = new Color(255, 175, 175, 200);

    private JFrame frame = new JFrame();

    public TestComponentAt() {
        setLayout(new GridLayout(ROW_COUNT, ROW_COUNT, 1, 1));
        setBackground(Color.black);
        for (int i = 0; i < ROW_COUNT * ROW_COUNT; i++) {
            JPanel panel = new JPanel();
            String name = String.format("[%d, %d]", i / ROW_COUNT, i % ROW_COUNT);
            panel.setName(name);
            if ((i / ROW_COUNT) % 2 == (i % ROW_COUNT) % 2) {
                panel.setBackground(Color.black);
            }
            panel.setPreferredSize(PREF_SIZE);
            int row = i / ROW_COUNT;
            add(panel);
            if (panel.getBackground() == Color.black && (row <= 2 || row >= 5)) {
                frame.repaint();
            }
        }
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                JPanel panel = (JPanel) getComponentAt(e.getPoint());
                if (panel == null || panel == TestComponentAt.this) {
                    return;
                }
                if (panel != null) {
                    panel.removeAll();
                    panel.revalidate();
                    panel.repaint();
                }
                panel.add(new JLabel(panel.getName()));
                panel.revalidate();
                panel.repaint();
            }
        });

    }

    private class MyLayer extends LayerUI<JComponent> {
        @Override
        public void paint(Graphics g, JComponent c) {
            super.paint(g, c);
            g.setColor(TRANSLUCENT_PINK);
            g.fillOval(100, 100, 100, 100);
        }
    }

    private void createAndShowGui() {
        TestComponentAt testComponentAt = new TestComponentAt();
        JLayer<JComponent> myLayer = new JLayer<JComponent>(testComponentAt, new MyLayer());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(480, 480);
        frame.getContentPane().add(myLayer);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        TestComponentAt obj = new TestComponentAt();
        obj.createAndShowGui();
    }
}
import java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.*;
导入javax.swing.*;
导入javax.swing.plaf.LayerUI;
公共类TestComponentAt扩展了JPanel{
私有静态最终整数行计数=8;
专用静态最终int W=60;
专用静态最终int H=W;
专用静态最终尺寸PREF_SIZE=新尺寸(W,H);
私有静态最终颜色半透明_粉色=新颜色(255、175、175、200);
私有JFrame=新JFrame();
公共TestComponentAt(){
setLayout(新的GridLayout(行数,行数,1,1));
挫折背景(颜色:黑色);
对于(int i=0;i<行计数*行计数;i++){
JPanel面板=新的JPanel();
String name=String.format(“[%d,%d]”,i/ROW\u计数,i%ROW\u计数);
panel.setName(名称);
如果((i/行计数)%2==(i%行计数)%2){
面板.立根背景(颜色.黑色);
}
面板。设置首选尺寸(首选尺寸);
int row=i/行计数;
添加(面板);
if(panel.getBackground()==Color.black&&(row=5)){
frame.repaint();
}
}
addMouseListener(新的MouseAdapter(){
@凌驾
公共无效鼠标按下(MouseEvent e){
JPanel面板=(JPanel)getComponentAt(e.getPoint());
if(panel==null | | panel==TestComponentAt.this){
返回;
}
如果(面板!=null){
panel.removeAll();
panel.revalidate();
panel.repaint();
}
添加(新的JLabel(panel.getName());
panel.revalidate();
panel.repaint();
}
});
}
私有类MyLayer扩展了LayerUI{
@凌驾
公共空隙涂料(图形g、J组件c){
超级油漆(g,c);
g、 setColor(半透明的_粉色);
g、 圆形(100100100100);
}
}
私有void createAndShowGui(){
TestComponentAt TestComponentAt=新的TestComponentAt();
JLayer myLayer=新JLayer(testComponentAt,new myLayer());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
帧设置大小(480480);
frame.getContentPane().add(myLayer);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
TestComponentAt obj=新的TestComponentAt();
obj.createAndShowGui();
}
}

JLayer可用于绘制JPanel及其组件。例如:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.*;

import javax.swing.*;
import javax.swing.plaf.LayerUI;

public class TestComponentAt extends JPanel {
    private static final int ROW_COUNT = 8;
    private static final int W = 60;
    private static final int H = W;
    private static final Dimension PREF_SIZE = new Dimension(W, H);
    private static final Color TRANSLUCENT_PINK = new Color(255, 175, 175, 200);

    private JFrame frame = new JFrame();

    public TestComponentAt() {
        setLayout(new GridLayout(ROW_COUNT, ROW_COUNT, 1, 1));
        setBackground(Color.black);
        for (int i = 0; i < ROW_COUNT * ROW_COUNT; i++) {
            JPanel panel = new JPanel();
            String name = String.format("[%d, %d]", i / ROW_COUNT, i % ROW_COUNT);
            panel.setName(name);
            if ((i / ROW_COUNT) % 2 == (i % ROW_COUNT) % 2) {
                panel.setBackground(Color.black);
            }
            panel.setPreferredSize(PREF_SIZE);
            int row = i / ROW_COUNT;
            add(panel);
            if (panel.getBackground() == Color.black && (row <= 2 || row >= 5)) {
                frame.repaint();
            }
        }
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                JPanel panel = (JPanel) getComponentAt(e.getPoint());
                if (panel == null || panel == TestComponentAt.this) {
                    return;
                }
                if (panel != null) {
                    panel.removeAll();
                    panel.revalidate();
                    panel.repaint();
                }
                panel.add(new JLabel(panel.getName()));
                panel.revalidate();
                panel.repaint();
            }
        });

    }

    private class MyLayer extends LayerUI<JComponent> {
        @Override
        public void paint(Graphics g, JComponent c) {
            super.paint(g, c);
            g.setColor(TRANSLUCENT_PINK);
            g.fillOval(100, 100, 100, 100);
        }
    }

    private void createAndShowGui() {
        TestComponentAt testComponentAt = new TestComponentAt();
        JLayer<JComponent> myLayer = new JLayer<JComponent>(testComponentAt, new MyLayer());

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(480, 480);
        frame.getContentPane().add(myLayer);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        TestComponentAt obj = new TestComponentAt();
        obj.createAndShowGui();
    }
}
import java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.*;
导入javax.swing.*;
导入javax.swing.plaf.LayerUI;
公共类TestComponentAt扩展了JPanel{
私有静态最终整数行计数=8;
专用静态最终int W=60;
专用静态最终int H=W;
专用静态最终尺寸PREF_SIZE=新尺寸(W,H);
私有静态最终颜色半透明_粉色=新颜色(255、175、175、200);
私有JFrame=新JFrame();
公共TestComponentAt(){
setLayout(新的GridLayout(行数,行数,1,1));
挫折地(公司)