0

パネルを拡張するクラスとフレームを拡張するクラスの 2 つのクラスがあります。

ファーストクラス、パネル(描画に使用):

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class GraficPne extends JPanel{


public int dim1 = 0, dim2 = 0;
public JLabel lblSem1GraficPne, lblSem2GraficPne;

public GraficPne(){
    super();
    this.setLayout(null);
    this.setupComponents();

}


public void setupComponents(){

    lblSem1GraficPne = new JLabel("Sem I");
    lblSem2GraficPne = new JLabel("Sem II");

    lblSem1GraficPne.setFont(new Font("Serif", Font.PLAIN, 12));
    lblSem2GraficPne.setFont(new Font("Serif", Font.PLAIN, 12));

    this.add(lblSem1GraficPne);
    this.add(lblSem2GraficPne);
}

public void layComponents(int firstConv, int secondConv){

    lblSem1GraficPne.setBounds(20, getHeight() - firstConv - 20, 100, 20);
    lblSem2GraficPne.setBounds(100, getHeight() - secondConv - 20, 100, 20);

}



public void paint(Graphics g){

    super.paint(g);

    g.setColor(Color.BLACK);
    g.drawRect(0, 0, getWidth()-1, getHeight()-1);

    this.setBackground(Color.GREEN);

    g.setColor(Color.RED);
    g.fillRect(20, getHeight()-dim1, 40, dim1);

    g.setColor(Color.BLUE);
    g.fillRect(100, getHeight()-dim2, 40, dim2);

    }



public void setData(int dim1, int dim2){

    this.dim1 = dim1;
    this.dim2 = dim2;

}

}

2 番目のクラスであるフレームは、パネルを追加するために使用されます。

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;


public class GraficFrm extends JFrame implements ActionListener{

private JButton btnApply;
private JLabel lblSem1, lblSem2;
private JTextField txtSem1, txtSem2;
private GraficPne ob; //the object from first class
private int firstConv = 0, secondConv = 0; 


public GraficFrm() {

    super("Grafic soft");
    initSettings();
    setupComponents();
}



private void initSettings() {

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(null);
    this.setSize(400, 450);
    this.setLocation(100, 100);
    this.setResizable(false);

}


private void setupComponents() {


    ob = new GraficPne();
    lblSem1 = new JLabel("Sem I");
    txtSem1 = new JTextField();
    lblSem2 = new JLabel("Sem II");
    txtSem2 = new JTextField();
    btnApply = new JButton("Apply");

    ob.setBounds(30, 50, 340, 200);
    lblSem1.setBounds(30, 280, 100, 20);
    txtSem1.setBounds(150, 280, 220, 20);
    lblSem2.setBounds(30, 330, 100, 20);
    txtSem2.setBounds(150, 330, 220, 20);
    btnApply.setBounds(170, 380, 80, 30);

    this.add(lblSem1);
    this.add(ob);
    this.add(txtSem1);
    this.add(lblSem2);
    this.add(txtSem2);
    this.add(btnApply);

    btnApply.addActionListener(this);

}


public void getConvertedValues(){

    String txtField1 = txtSem1.getText();
    firstConv = Integer.parseInt(txtField1);
    String txtField2 = txtSem2.getText();
    secondConv = Integer.parseInt(txtField2);

}


public void getHighValues(){

    if((firstConv > 100) || (secondConv > 100)) {

        JOptionPane.showMessageDialog(this, "Only values < 100 are allowed");

        firstConv = 0;
        secondConv = 0;
        txtSem1.setText("");
        txtSem2.setText("");
        ob.removeAll();
        ob.repaint();
    }

}



public void actionPerformed(ActionEvent e) {


    if(e.getSource().equals(btnApply)){

        try{

        new GraficFrm();
        getConvertedValues();
        getHighValues();
        ob.setData(firstConv, secondConv);
        ob.layComponents(firstConv,secondConv);
        ob.repaint();

        }catch(NumberFormatException ex1){
            JOptionPane.showMessageDialog(this, "Only natural numbers are allowed");
        }

    }

}

public static void main(String[] args) {

    GraficFrm frm = new GraficFrm();
    frm.setVisible(true);
}

}

やりたいことは、getNegativeValues() という新しいメソッドを作成することだけです。このメソッドは、適用ボタンを押すことで呼び出されます。このメソッドは、firstConv または secondConv が 0 未満のときに実行されます。メソッドのブロック getNegativeValues( )、ペイント(Graphics g)のようにパネルの緑の背景のみを保持したいが、中央の水平線を描画する(g.drawLine(0、getHeight()/ 2、getWidth()、getHeight() )/2);)。次に、プログラムを実行して入力すると、最初のテキストフィールドに値 55、2 番目のテキストフィールドに -40 を指定して、中央の水平線の上に 55 を描画し、中央の水平線の下に -40 を描画すると、0 ポイントがこの中央の水平線上にあります。

LE: @nIcE cOw 簡単にまとめます: まず、アプリを実行すると、私の例のように、緑色のパネルと 2 つのテキスト フィールドを持つ 2 つのラベルが表示されます (私の例に従ってみてください)。 、お願いします)(大丈夫です。私はすでにこれを行っているので、この部分は完了しています)。その後、これらの2つのテキストフィールドを完了すると、2つの正の値で言いましょう。次に、[適用]ボタンを押すと、私の例とまったく同じように発生します(中央の垂直線なし)(すでにこれも行っています)。すべて問題ありませんが、私の問題は次のとおりです。これらの2つのテキストフィールドの1つを負の値で完了し、他のテキストフィールドを正の値で完了し、[適用]ボタンを押した後、1つに入力された負の値があることをアプリケーションに認識させたい私のテキストフィールドの したがって、緑色のパネルに中央の水平線を描き([適用]ボタンを押した後)、最初にアップロードした写真とまったく同じように2つの長方形を描きます。私がやりたいことを理解するのを手伝うと言ったように、私を助けてください。また、あなたの努力に本当に感謝しています。

4

1 に答える 1