1

誰かが幅と長さを入力すると、ダイアログに対応するサイズが描画されるプログラムがあります。

シナリオ

これが何が起こるかです。私はそれを起動し、

長さと幅

次に、[go] を押します。

ダイアログ

そして、対話は何も思いつきません。

コード

したがって、イベント処理コードは次のとおりです。

public void actionPerformed(ActionEvent e){
d.init();
}

dダイアログを表示するクラスです。私はそれを表示するとは思っていませんでしたが、init が行うのはDrawRectangleパネルを追加することだけです (これは DrawRectangle` クラスです)。

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

public class DrawRectangle extends JPanel{
   int x = 100;
    int y = 50;
    int h;
    int w ;

    private void Dodrawing(Graphics g, int w, int h, int x, int y){
        g2d.fillRect(x, y, w, h);
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        //Graphics, width, heigth, x coordinate, y coordinate
        Dodrawing(g, w, h, x, y);
    }
}

質問

hwの値をテキストフィールドの値に変更してから、図面を更新できますか?

編集

SSCCE は次のとおりです。

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Area;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class SSCCE extends JFrame implements ActionListener{

    //Variable declaration
    JLabel LengthLabel = new JLabel("Length");
    JLabel WidthLabel = new JLabel("Width");
    JLabel Area = new JLabel ();
    JLabel Perimeter = new JLabel ();
    JLabel Volume = new JLabel();
    JTextField Length = new JTextField();
    JTextField Width = new JTextField();
    int LengthInt;
    int WidthInt;

    String LengthStr;
    String WidthStr;

    JDialog dialog;  

Color darkGreen = new Color(50, 150, 50);
JButton close = new JButton("Close");
boolean visi = true;
    JButton go = new JButton("Go");

  public SSCCE(){
      super("Geometry");
   setSize(500, 600);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      GridLayout grid = new GridLayout(20 , 10);

      setLayout(grid);

      add(LengthLabel); 
      add(Length);
      add(WidthLabel);
      add(Width); 
      add(go);
      add(Area);
      add(Perimeter);
      go.addActionListener(this);
     setVisible(true);   
}
  JPanel p = new JPanel();
   int x = 100;
    int y = 50;
    int h ;
    int w ;

    private void Dodrawing(Graphics g, int w, int h, int x, int y){
Graphics2D g2d = (Graphics2D) g;
        g2d.fillRect(x, y, w, h);
    }

    protected void paintComponent(Graphics g)
    {
        p.paintComponents(g);

        //Graphics, width, heigth, x coordinate, y coordinate
        Dodrawing(g, w, h, x, y);
    }

  //Action Peformed method
   public void actionPerformed(ActionEvent e){
       //Getting the text from the input fields
        LengthStr = Length.getText().toString();
       WidthStr = Width.getText().toString();
try{
LengthInt = Integer.parseInt(LengthStr);
WidthInt = Integer.parseInt(WidthStr);
init();
}catch(Exception event){
System.out.println(event);
}    
  }

protected void init() {  

dialog = new JDialog(this, "Copie", true);
dialog.setResizable(false);  

dialog.add(p);  

dialog.pack();  
dialog.setSize(300, 200);
Dimension Size = Toolkit.getDefaultToolkit().getScreenSize();  
dialog.setLocation(new Double((Size.getWidth()/2) - (dialog.getWidth()/2)).intValue(), new Double((Size.getHeight()/2) - (dialog.getHeight()/2)).intValue());  

dialog.setVisible(visi);
}  

protected void close() {  
this.dialog.dispose();  
this.dialog.setVisible(false);  
}  
     public static void main(String[] args){
         SSCCE ge = new SSCCE();
     }
}
4

2 に答える 2

2
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Area;
import javax.swing.*;

public class SSCCE extends JFrame implements ActionListener {

    //Variable declaration
    JLabel LengthLabel = new JLabel("Length");
    JLabel WidthLabel = new JLabel("Width");
    JLabel Area = new JLabel();
    JLabel Perimeter = new JLabel();
    JLabel Volume = new JLabel();
    JTextField Length = new JTextField();
    JTextField Width = new JTextField();
    int LengthInt;
    int WidthInt;
    String LengthStr;
    String WidthStr;
    JDialog dialog;
    Color darkGreen = new Color(50, 150, 50);
    JButton close = new JButton("Close");
    boolean visi = true;
    JButton go = new JButton("Go");

    public SSCCE() {
        super("Geometry");
        setSize(500, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GridLayout grid = new GridLayout(20, 10);

        setLayout(grid);

        add(LengthLabel);
        add(Length);
        add(WidthLabel);
        add(Width);
        add(go);
        add(Area);
        add(Perimeter);
        go.addActionListener(this);
        setVisible(true);
    }
    JPanel p = new JPanel();
    int x = 100;
    int y = 50;
    int h;
    int w;

    private void Dodrawing(Graphics g, int w, int h, int x, int y) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.fillRect(x, y, w, h);
    }

    protected void paintComponent(Graphics g) {
        p.paintComponents(g);

        //Graphics, width, heigth, x coordinate, y coordinate
        Dodrawing(g, w, h, x, y);
    }

    //Action Peformed method
    public void actionPerformed(ActionEvent e) {
        //Getting the text from the input fields
        LengthStr = Length.getText().toString();
        WidthStr = Width.getText().toString();
        try {
            LengthInt = Integer.parseInt(LengthStr);
            WidthInt = Integer.parseInt(WidthStr);
            init();
        } catch (Exception event) {
            System.out.println(event);
        }
    }

    protected void init() {

        dialog = new JDialog(this, "Copie", true);
        dialog.setResizable(false);

        dialog.add(p);

        dialog.pack();
        Dimension Size = Toolkit.getDefaultToolkit().getScreenSize();
        dialog.setLocation(new Double((Size.getWidth() / 2) - (dialog.getWidth() / 2)).intValue(), new Double((Size.getHeight() / 2) - (dialog.getHeight() / 2)).intValue());
        dialog.setLayout(new BorderLayout());
        dialog.add(new DrawRectangle(WidthInt, LengthInt));
        dialog.pack();
        dialog.setSize(300, 200);
        dialog.setVisible(visi);
    }

    protected void close() {
        this.dialog.dispose();
        this.dialog.setVisible(false);
    }

    public static void main(String[] args) {
        SSCCE ge = new SSCCE();
    }
}

class DrawRectangle extends JPanel {

    int x = 100;
    int y = 50;
    int h = 100;
    int w = 100;

    DrawRectangle(int w, int h) {
        this.w = w;
        this.h = h;
    }

    private void Dodrawing(Graphics g, int w, int h, int x, int y) {
        g.setColor(Color.RED);
        g.fillRect(x, y, w, h);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        System.out.println("paintComponent");
        //Graphics, width, heigth, x coordinate, y coordinate
        Dodrawing(g, w, h, x, y);
    }
}

その他のヒント

  1. コード ブロックには一貫性のある論理的なインデントを使用します。コードのインデントは、人々がプログラムの流れを理解できるようにすることを目的としています。
  2. ソース コード内の 1 行の空白行で常に十分です。
  3. クラス、メソッド、および属性名の一般的なJava 命名規則(特に名前に使用されるケース) を学び、それらを一貫して使用してください。
  4. 最上位のコンテナのサイズを設定しないでください。代わりにコンテンツをレイアウトして呼び出しますpack()
  5. Java GUI は、EDT で開始および更新する必要があります。
  6. JSpinnerアプリの場合、テキスト フィールドの代わりに を使用します。数が必要です。
于 2013-07-22T15:03:29.840 に答える
0

あなたはg.repaint()後にしなければならないg2d.fillRect(x,y,w,h)

于 2013-07-22T14:23:53.017 に答える