2

テキストボックス内で指定された数と同じ数の楕円を生成するアプレットを作成しようとしています。テキストボックスが表示されますが、Enterキーを押すと、paintComponentが描画されません。前もって感謝します。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import net.miginfocom.layout.*;
import net.miginfocom.swing.MigLayout;
import java.awt.geom.*;

public class OvalDrawer extends JApplet
{
private JLabel numberL;
private JTextField numberTF;

private NumHandler numHandler;

public static final int WIDTH = 500;
public static final int HEIGHT = 500;

//Create Layout
public void init()
{
    setLayout(new MigLayout("wrap 2"));
    numberL = new JLabel("Enter number of ovals to draw:");
    numberTF = new JTextField(7);

    add(numberL);
    add(numberTF);

    numHandler = new NumHandler();
    numberTF.addActionListener(numHandler);

    setSize(500, 500);
}

//Event Handler
public class NumHandler implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        repaint();
    }

}

//Draw Ovals
public void paintComponent (Graphics g)
{
    super.paintComponents(g);
    int number;
    int x = 10;
    int y = 30;
    int width = 20;
    int height = 10;

    number = Integer.parseInt(numberTF.getText());

    for (int i = 0; i < number; i++)
    {
        g.drawOval(x, y, width, height);

        x += 5;
        y += 5;
        width += 5;
        height += 5;
    }
}
}
4

2 に答える 2

2

JAppletクラスには、オーバーライドするpaintComponentメソッドがありません。コンパイラでは実際のスーパーメソッドを呼び出せないことに注意してください(これを行っていると思われますが、実際super.paintComponents(...)にはまったく異なるメソッドを呼び出しています)。

悪い解決策は、JAppletのpaintメソッドをオーバーライドすることですが、これを行わないことを強くお勧めします。代わりに、JPanelのpaintComponentメソッドを描画してから、JAppletにそのJPanelを表示させる必要があります。また、@Overrideアノテーションを使用する習慣を身に付けて、自分が考えているメソッドを実際にオーバーライドしていることを確認することもできます。

于 2012-12-04T17:09:13.297 に答える
1
/*  * <Applet code=PressButton2 width=600 height=600>  * </Applet> 
*/

import javax.swing.*; import java.awt.*; import java.awt.event.*;


class MyPanel extends JPanel {
    static String s="n";

    public void paintComponent(Graphics g)  { 
        super.paintComponent(g);

        if(s.equals("g"))
            setBackground(Color.green);
        if(s.equals("b"))
            setBackground(Color.blue);
        if(s.equals("c"))
            setBackground(Color.white);
     }
}

public class PressButton2 extends JApplet {
    MyPanel panel;
    MyPanel screen;
    String s="n";

    JButton green, clear, blue;

    public void init() {
        Container container = getContentPane();
        panel = new MyPanel();
        screen = new MyPanel();
        panel.setLayout(new GridLayout(1, 3));

        green = new JButton("Green");
        blue = new JButton("Blue");
        clear = new JButton("Clear");
        green.addActionListener(new ActionEventHandler1());
        blue.addActionListener(new ActionEventHandler1());
        clear.addActionListener(new ActionEventHandler1());

        panel.add(green);
        panel.add(blue);
        panel.add(clear);

        container.add(panel, BorderLayout.SOUTH);
        container.add(screen);
    }

class ActionEventHandler1 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        String temp = e.getActionCommand(); 

        if (temp.equals("Green")) {
            MyPanel.s = "g";

            screen.repaint();
        }
        if (temp.equals("Blue")) {
            MyPanel.s = "b";
            screen.repaint();
        }
        if (temp.equals("Clear")) {
            MyPanel.s = "c";
            screen.repaint();
        }
    }
}
于 2016-05-10T05:40:27.420 に答える