Java-无法在按钮内访问我的JPanel

Java-无法在按钮内访问我的JPanel,java,swing,Java,Swing,我做了一些研究,但我无法找出我的问题是什么,所以我希望有人能在这里帮助我。我想做一个程序什么得到一个图像,改变它的长度,宽度和颜色,当我点击不同的按钮。到目前为止还可以,但我的按钮有问题。首先,我想创建自己的按钮类,但它们没有那么好用,所以我决定在测试类的主方法中实现按钮,如下所示: JButton test = new JButton("test"); test.addActionListener(new ActionListener() { publi

我做了一些研究,但我无法找出我的问题是什么,所以我希望有人能在这里帮助我。我想做一个程序什么得到一个图像,改变它的长度,宽度和颜色,当我点击不同的按钮。到目前为止还可以,但我的按钮有问题。首先,我想创建自己的按钮类,但它们没有那么好用,所以我决定在测试类的主方法中实现按钮,如下所示:

        JButton test = new JButton("test");
    test.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                BufferedImage myPicture = ImageIO.read(new File("myImage.jpg"));
                JPanel p = new DrawNew(myPicture);
                center.removeAll();
                center.add(p);
            } catch (IOException ex) {
                System.out.println("didnt work");
                System.exit(0);
            }
        }
    });
package app.exercise.data;

import java.awt.BorderLayout; 
import java.awt.event.*;
import javax.swing.*;
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;
import javax.imageio.ImageIO; 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.awt.image.ColorModel;


public class DrawNew extends JPanel {

private int height;
private int width;
private BufferedImage myPic;

public DrawNew (BufferedImage myPicture) {
    height = myPicture.getHeight();
    width = myPicture.getWidth();
    myPic = myPicture;
}


    public Dimension getPreferredSize() {
        return new Dimension(width*2, height*2);
}
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    int select = 1;

    switch(select) {
        case 1: select = 1;
            for (int i = 0; i < width; i++) {
                for (int k = 0; k<height;k++) {
                    Color mycolor = new Color(myPic.getRGB(i,k));
                    g.setColor(mycolor);
                    g.fillRect(2*i,2*k,2,2);
                }
            }
            break;

        case 2: select = 2;
            for (int i = 0; i < width; i++) {
                for (int k = 0; k<height;k++) {
                    Color mycolor = new Color(myPic.getRGB(i,k));
                    int h = mycolor.getRed();
                    int t = mycolor.getRed();
                    int f = mycolor.getRed();
                    int mittel = (h+f+t)/3;
                    Color newColor = new Color (mittel,mittel,mittel);
                    g.setColor(newColor);
                    g.fillRect(2*i,2*k,2,2);
                }
            }
            break;

        case 3: select = 3;
            for (int i = 0; i < width; i++) {
                for (int k = 0; k<height;k++) {
                    Color mycolor = new Color(myPic.getRGB(i,k));
                    int h = mycolor.getRed();
                    int t = mycolor.getRed();
                    int f = mycolor.getRed();
                    int mittel = (h+f+t)/3;
                    if (mittel <= 51) {
                        g.setColor(Color.BLACK);
                        g.fillRect(2*i,2*k,2,2);
                    } else if(mittel <=102) {
                        g.setColor(Color.WHITE);
                        g.drawLine(2*i,2*k,2*i,2*k); 
                        g.setColor(Color.BLACK);
                        g.drawLine(2*i+1,2*k+1,2*i+1,2*k+1); 
                        g.drawLine(2*i+1,2*k,2*i+1,2*k);
                        g.drawLine(2*i,2*k+1,2*i,2*k+1);
                    } else if(mittel <=153) {
                        g.setColor(Color.BLACK);
                        g.drawLine(2*i,2*k,2*i,2*k); 
                        g.drawLine(2*i+1,2*k+1,2*i+1,2*k+1); 
                        g.setColor(Color.WHITE);
                        g.drawLine(2*i+1,2*k,2*i+1,2*k);
                        g.drawLine(2*i,2*k+1,2*i,2*k+1);
                    } else if(mittel <=204) {
                        g.setColor(Color.BLACK);
                        g.drawLine(2*i,2*k,2*i,2*k); 
                        g.setColor(Color.WHITE);
                        g.drawLine(2*i+1,2*k,2*i+1,2*k);
                        g.drawLine(2*i,2*k+1,2*i,2*k+1);
                        g.drawLine(2*i+1,2*k+1,2*i+1,2*k+1);
                    } else if(mittel <=255) {
                        g.setColor(Color.WHITE);
                        g.fillRect(2*i,2*k,2,2);

                    }
                }
            }
            break;
    }
}
问题是当我按下按钮时,它什么也不做。我只试了中心。全部移除,但它什么也没做。按钮中的中心似乎与主类中的中心不同。以下是主要课程:

package app.exercise.test;

import app.exercise.data.JButtonExit;
import app.exercise.data.JButtonOriginal;
import app.exercise.data.JButtonGrayscale;
import app.exercise.data.JButtonPattern;
import app.exercise.data.DrawNew;
import java.awt.BorderLayout;
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;
import javax.imageio.ImageIO; 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class AppTest {


public static void main(String[] args) {
    JFrame f = new JFrame("App");
    JPanel center = new JPanel();
    JPanel bottom = new JPanel();
    try {
        BufferedImage myPicture = ImageIO.read(new File("myImage.jpg"));
        JPanel p = new DrawNew(myPicture);
        center.add(p);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } catch (IOException ex) {
        System.out.println("didnt work");
        System.exit(0);
    }

    JButton exitButton = new JButton("Exit");
    JButtonExit j = new JButtonExit();
    exitButton.addActionListener(j);

    int h =1;
    JButton test = new JButton("test");
    test.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                BufferedImage myPicture = ImageIO.read(new File("myImage.jpg"));
                JPanel p = new DrawNew(myPicture);
                center.removeAll();
                center.add(p);
            } catch (IOException ex) {
                System.out.println("didnt work");
                System.exit(0);
            }
        }
    });



    JButton originalButton = new JButton("Original");
    JButtonOriginal k = new JButtonOriginal();
    originalButton.addActionListener(k);

    JButton grayscaleButton = new JButton("Grayscale");
    JButtonGrayscale l = new JButtonGrayscale();
    grayscaleButton.addActionListener(l);

    JButton patternButton = new JButton("Pattern");
    JButtonPattern m = new JButtonPattern();
    patternButton.addActionListener(m);

    Box boxBottom = Box.createHorizontalBox();

    boxBottom.add(Box.createHorizontalGlue());
    boxBottom.add(exitButton);

    Box topBox = Box.createHorizontalBox();

    topBox.add(originalButton);
    topBox.add(grayscaleButton);
    topBox.add(patternButton);
    topBox.add(test);

    f.add(topBox, BorderLayout.NORTH);
    f.add(center, BorderLayout.CENTER);
    f.add(boxBottom, BorderLayout.SOUTH);

    f.pack();
    f.setVisible(true); 
}
}

新类如下所示:

        JButton test = new JButton("test");
    test.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                BufferedImage myPicture = ImageIO.read(new File("myImage.jpg"));
                JPanel p = new DrawNew(myPicture);
                center.removeAll();
                center.add(p);
            } catch (IOException ex) {
                System.out.println("didnt work");
                System.exit(0);
            }
        }
    });
package app.exercise.data;

import java.awt.BorderLayout; 
import java.awt.event.*;
import javax.swing.*;
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;
import javax.imageio.ImageIO; 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.awt.image.ColorModel;


public class DrawNew extends JPanel {

private int height;
private int width;
private BufferedImage myPic;

public DrawNew (BufferedImage myPicture) {
    height = myPicture.getHeight();
    width = myPicture.getWidth();
    myPic = myPicture;
}


    public Dimension getPreferredSize() {
        return new Dimension(width*2, height*2);
}
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    int select = 1;

    switch(select) {
        case 1: select = 1;
            for (int i = 0; i < width; i++) {
                for (int k = 0; k<height;k++) {
                    Color mycolor = new Color(myPic.getRGB(i,k));
                    g.setColor(mycolor);
                    g.fillRect(2*i,2*k,2,2);
                }
            }
            break;

        case 2: select = 2;
            for (int i = 0; i < width; i++) {
                for (int k = 0; k<height;k++) {
                    Color mycolor = new Color(myPic.getRGB(i,k));
                    int h = mycolor.getRed();
                    int t = mycolor.getRed();
                    int f = mycolor.getRed();
                    int mittel = (h+f+t)/3;
                    Color newColor = new Color (mittel,mittel,mittel);
                    g.setColor(newColor);
                    g.fillRect(2*i,2*k,2,2);
                }
            }
            break;

        case 3: select = 3;
            for (int i = 0; i < width; i++) {
                for (int k = 0; k<height;k++) {
                    Color mycolor = new Color(myPic.getRGB(i,k));
                    int h = mycolor.getRed();
                    int t = mycolor.getRed();
                    int f = mycolor.getRed();
                    int mittel = (h+f+t)/3;
                    if (mittel <= 51) {
                        g.setColor(Color.BLACK);
                        g.fillRect(2*i,2*k,2,2);
                    } else if(mittel <=102) {
                        g.setColor(Color.WHITE);
                        g.drawLine(2*i,2*k,2*i,2*k); 
                        g.setColor(Color.BLACK);
                        g.drawLine(2*i+1,2*k+1,2*i+1,2*k+1); 
                        g.drawLine(2*i+1,2*k,2*i+1,2*k);
                        g.drawLine(2*i,2*k+1,2*i,2*k+1);
                    } else if(mittel <=153) {
                        g.setColor(Color.BLACK);
                        g.drawLine(2*i,2*k,2*i,2*k); 
                        g.drawLine(2*i+1,2*k+1,2*i+1,2*k+1); 
                        g.setColor(Color.WHITE);
                        g.drawLine(2*i+1,2*k,2*i+1,2*k);
                        g.drawLine(2*i,2*k+1,2*i,2*k+1);
                    } else if(mittel <=204) {
                        g.setColor(Color.BLACK);
                        g.drawLine(2*i,2*k,2*i,2*k); 
                        g.setColor(Color.WHITE);
                        g.drawLine(2*i+1,2*k,2*i+1,2*k);
                        g.drawLine(2*i,2*k+1,2*i,2*k+1);
                        g.drawLine(2*i+1,2*k+1,2*i+1,2*k+1);
                    } else if(mittel <=255) {
                        g.setColor(Color.WHITE);
                        g.fillRect(2*i,2*k,2,2);

                    }
                }
            }
            break;
    }
}
}

所以我的问题是:如何在我的按钮中输入center.addp。它在一开始工作时没有任何问题,但在按钮中由于某种原因没有


非常感谢您的帮助。

您是否尝试过center.revalidate;和/或中心重新喷漆;将新零部件添加到中心面板后?我从这个问题中得到了答案。center.revalidate的可能副本;成功了,我想我已经试过了,但似乎我错了。非常感谢你