繁体   English   中英

如何从ActionListener类的actionPerformed()方法在框架上绘制对象

[英]How to draw an object on a Frame from an actionPerformed() method of ActionListener class

我正在尝试在ActionListener类的actionPerformed()方法内绘制Shape对象,并将其添加到InternalFrame中。

public class InternalFrame extends JInternalFrame{

    public JSlider redSlider, greenSlider, blueSlider;
    public TextField redField = new TextField();
    public TextField greenField = new TextField();
    public TextField blueField = new TextField();
    Checkbox checkBox = new Checkbox("Filled", true);
    String[] shapeNames = {"Oval", "Rectangle", "Line", "NewShape"};

    public InternalFrame(String string, boolean b,
                    boolean c, boolean d, boolean e) {
        super(string,b,c,d);

        this.setLayout(new BorderLayout());

        redSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32);
        greenSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32);
        blueSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32);

        redField.setText(" " + redSlider.getValue());
        greenField.setText(" " + greenSlider.getValue());
        blueField.setText(" " + blueSlider.getValue());

        redSlider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                // TODO Auto-generated method stub
                redField.setText(" " + redSlider.getValue());
                //System.out.println("red value: " + redSlider.getValue());
            }
        });

        greenSlider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                // TODO Auto-generated method stub
                greenField.setText(" " + greenSlider.getValue());
            }
        });

        blueSlider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                // TODO Auto-generated method stub
                blueField.setText(" " + blueSlider.getValue());
            }
        });

        JPanel topPanel = new JPanel();
        topPanel.setLayout(new GridLayout(1, 4, 6, 0));

        JComboBox shapesDropDown = new JComboBox(shapeNames);
        shapesDropDown.setSelectedIndex(0);

        shapesDropDown.addActionListener(new ActionListener (){     
            @Override
            public void actionPerformed(ActionEvent arg0) {
                //if(arg0.getSource() == shapeNames[1] ){
                MyShape myShape = new MyRectangle();
                add(myShape, BorderLayout.CENTER);

                System.out.println("HHHH");
                //}
            }
        });

        JPanel empty1 = new JPanel();
        JPanel empty2 = new JPanel();

        topPanel.add(empty1);
        topPanel.add(shapesDropDown);
        topPanel.add(checkBox);
        topPanel.add(empty2);

        JPanel sliderPanel = new JPanel();
        sliderPanel.setLayout(new GridLayout(3, 3));

        sliderPanel.add(new Label("Red:"));
        sliderPanel.add(redSlider);
        sliderPanel.add(redField);
        sliderPanel.add(new Label("Green:"));
        sliderPanel.add(greenSlider);
        sliderPanel.add(greenField);
        sliderPanel.add(new Label("Blue:"));
        sliderPanel.add(blueSlider);
        sliderPanel.add(blueField);

        add(topPanel, BorderLayout.NORTH);
        add(sliderPanel, BorderLayout.SOUTH);
    }
}

形状对象也正在创建,但是它没有显示在InternalFrame上。

不用扩展JInternalFrame ,而是使用工厂方法创建内部框架及其内容。 在此示例中 ,在构造函数中调用了createInternalFrame() ,但也可以从ActionListener调用它。 注意,内部框架的默认布局是BorderLayout ,默认位置是CENTER 在调整容器的大小和可见性之前,请务必先pack()容器。

图片

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM