1

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

GUI主类:

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;

        }
    }
}
4

1 回答 1

3

您永远不会重置矩形位置,因此在第一次绘制后它保持在 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);
}
于 2013-09-20T15:18:25.453 回答