有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPanels,使用listener更改大小

我正在尝试做一个JPanel,每次点击一个按钮就可以改变它的大小。我的方法是创建两个不同大小的面板。一旦点击,其中一个会变为可见,另一个则不可见。到目前为止,我已经设法使第一个隐形,但我被困在那里。我的方法好吗?我错过了什么?这里是代码

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;


public class GrowAndShrinkSquareGUI {
    JFrame frame;
    SquareDrawPanel greenPanel;
    SquareDrawPanel greenPanel2;

    public class SquareDrawPanel extends JPanel {

        int locationX;
        int locationY;
        int width;
        int height;

        SquareDrawPanel(int x, int y, int w, int h) {

            locationX = x;
            locationY = y;
            width = w;
            height = h;

        }

        public void paintComponent(Graphics g) {

            g.setColor(Color.green);
            g.fillRect(locationX, locationY, width, height);

        }

    }

    public class growAndShrinkListener implements ActionListener {

        JButton button;

        public growAndShrinkListener() {

            JButton button = new JButton("Click me to grow the Square");
            frame.add(button, BorderLayout.NORTH);
            button.addActionListener(this);}


        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.print("clicked");        
            greenPanel.setVisible(false);
            greenPanel2.setVisible(true);

        }}

    public static void main(String[] args) {
        GrowAndShrinkSquareGUI test = new GrowAndShrinkSquareGUI();

        test.go();

    }

    public void go() {

        frame = new JFrame();
        frame.setSize(500, 500);
        frame.setVisible(true);
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        drawPanel(greenPanel);
        drawPanel(greenPanel2);

        growAndShrinkListener button = new growAndShrinkListener();
        //addButton(CreateJButton());

    }

    private JPanel createRectPanel(int x, int y) {

        greenPanel = new SquareDrawPanel(x, y, 100, 100);

        return greenPanel;
    }

    private JPanel createRectPanel2(int x, int y) {

        greenPanel2 = new SquareDrawPanel(x, y, 200, 200);

        return greenPanel2;
    }

    private void drawPanel(JPanel panel) {
        panel = createRectPanel(setLocationX(), setLocationY());
        frame.add(panel, BorderLayout.CENTER); // DoesNot run properly
    }

    private int setLocationX() {

        int centeredX = frame.getWidth() / 2 - 50;
        return centeredX;
    }

    private int setLocationY() {

        int centeredY = frame.getHeight() / 2 - 75;

        return centeredY;
    }


}

共 (0) 个答案