簡體   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