矩形组件在调整框架大小时消失



我有以下代码(试图学习swing和java)。我使用类使用矩形组件创建了一个梯子,并放置在主框架上。一切正常,但如果我稍微调整它的大小,ShapeManager 对象(即梯子)就会消失。我不知道发生了什么。请帮忙。

吉安类:

package mainProg;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.*;

public class GUIMain {
    static JPanel mainPanel;
    static JButton[] newButtons;
    static ShapeManager newShape;
    private static class BtnEvtHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            //System.exit(0);
            JOptionPane.showMessageDialog( null, "WELCOME" );
        }
    }
    private static JButton[] createButtons() {
        JButton[] buttonArray= new JButton[2];
        buttonArray[0]=new JButton("OK");
        buttonArray[1]=new JButton("MOVE");
        BtnEvtHandler okButtonHandler= new BtnEvtHandler();
        ( buttonArray[0]).addActionListener(okButtonHandler);
        return buttonArray;
    }

    private static ShapeManager createShape(int x) {
        ShapeManager newContent=new ShapeManager(x);
        return newContent;      
    }
    private static JPanel mainContainer() {
        JPanel mainPanel= new JPanel();
        mainPanel.setSize(400, 400);
        return mainPanel;
    }

    private static void createAndShowGUI() {
        JFrame.setDefaultLookAndFeelDecorated(false);
        JFrame frame = new JFrame(" DB ");
        mainPanel= mainContainer();
        mainPanel.setLayout(new BorderLayout(10, 10));
        newButtons= createButtons();
        newShape= createShape(20);
        newButtons[0].setHorizontalAlignment(0);
        mainPanel.add(newButtons[0],BorderLayout.PAGE_START); 
        newButtons[1].setHorizontalAlignment(0);
        mainPanel.add(newButtons[1],BorderLayout.PAGE_END);
        newShape.setPreferredSize(new Dimension(400, 400));
        mainPanel.add(newShape, BorderLayout.LINE_END);


        frame.setContentPane(mainPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setLocation(500,200);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

形状管理器类:

package mainProg;
import javax.swing.JPanel;
import java.awt.*;

@SuppressWarnings("serial")
class ShapeManager extends JPanel {
    int rectPos;
    ShapeManager(int rectPos) {
        setPreferredSize(new Dimension(400,400));
        this.rectPos=rectPos;
    }
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        while (rectPos<150) {
            g.setColor(Color.BLUE);
            g.drawRect(rectPos+10, rectPos+10, 100, 10);
            g.fillRect(rectPos+10, rectPos+10, 100, 10);
            rectPos=rectPos+10;
        }
    }
}

您永远不会重置矩形位置,因此在第一次绘制后,它保持在 150 以上。 您需要在退出 while 循环后重置它。

试试这个:

g.setColor(Color.BLUE);
int position = rectPos;
while (position<150) {
   position += 10;
   g.drawRect(position, position, 100, 10);
   g.fillRect(position, position, 100, 10);
}

最新更新