Witam,
mam taki problem, gdyż nie wiem jak w programie zaznaczyć żeby na wykresie zaznaczyć pole przecięcia 3 prostych. Może ktoś pomoże :)
package javaapplication12;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;
class PanelGrafi
extends JPanel
implements ActionListener{
final static Color kolorRamki = Color.green;
final static Color kolorTla = Color.white;
final static Color kolorLiter = Color.orange;
JTextField parametr1;
JTextField parametr2;
JTextField parametr3;
JTextField parametr4;
JTextField parametr5;
JTextField parametr6;
String stringParametru1 = "";
String stringParametru2 = "";
String stringParametru3 = "";
String stringParametru4 = "";
String stringParametru5 = "";
String stringParametru6 = "";
public PanelGrafi(JTextField _parametr1,JTextField _parametr2,JTextField _parametr3,JTextField _parametr4,JTextField _parametr5,JTextField _parametr6){
parametr1 = _parametr1;
parametr2 = _parametr2;
parametr3 = _parametr3;
parametr4 = _parametr4;
parametr5 = _parametr5;
parametr6 = _parametr6;
}
public void paint(Graphics g){
Font fb = new Font( "SansSerif", Font.BOLD, 12 );
Font f = new Font( "TimesRoman", Font.PLAIN, 10 );
Dimension d = getSize(); // Pobiera aktualne rozmiary panela
g.setColor(kolorTla); // Wypełnia panel kolorem tła
g.fillRect(0, 0, d.width - 1, d.height - 1);
g.setColor(kolorRamki); // Rysuje ramkę dookoła panela
g.drawRect(0, 0, d.width - 1, d.height - 1);
g.translate (d.width/2,d.height/2);
int y=0,c=0;
if(parametr1!=null || parametr2!=null || parametr3!=null || parametr4!=null || parametr5!=null || parametr6!=null ){
try{
float an=Float.parseFloat(parametr1.getText());
float bn=Float.parseFloat(parametr2.getText());
float an1=Float.parseFloat(parametr3.getText());
float bn1=Float.parseFloat(parametr4.getText());
float an2=Float.parseFloat(parametr5.getText());
float bn2=Float.parseFloat(parametr6.getText());
g.setColor(Color.black);
g.drawLine( -1*((d.width/2)-20), 0, (d.width/2)-20, 0 );
g.drawLine( 0, -1*((d.height/2)-20), 0, (d.height/2)-20 );
g.drawLine((d.width/2)-30,-8,(d.width/2)-20,0);
g.drawLine((d.width/2)-30,8,(d.width/2)-20,0);
g.drawLine(-8,-1*((d.height/2)-30),0,-1*((d.height/2)-20));
g.drawLine(8,-1*((d.height/2)-30),0,-1*((d.height/2)-20));
g.setFont(fb);
g.drawString("x",(d.width/2)-30,-12);
g.drawString("y",12,-1*((d.height/2)-30));
g.setFont(f);
for(int i=0;i>-1*((d.width/2)-30);i-=20){
g.drawLine(i,3,i,-3);
if(i!=0){ g.drawString(" "+(i/20)+" ",i-10,15); }
else if(i==0){ g.drawString("0",i-10,10); }
}
for(int i=0;i<((d.width/2)-30);i+=20){
g.drawLine(i,3,i,-3);
if(i!=0){ g.drawString(" "+(i/20)+" ",i-5,15); }
}
for(int i=0;i>-1*((d.height/2)-30);i-=20){
g.drawLine(3,i,-3,i);
if(i!=0){ g.drawString(" "+(-1*(i/20))+" ",-24,i+5); }
}
for(int i=0;i<((d.height/2)-30);i+=20){
g.drawLine(3,i,-3,i);
if(i!=0){ g.drawString(" "+(-1*(i/20))+" ",-24,i+5); }
}
if(an!=0){
g.setFont(fb);
g.setColor(Color.red);
g.drawString("x1="+an+"* x2 +"+bn+"",-1*((d.width/2)-30),-1*((d.height/2)-12));
for(int i=-1*((d.width/2)-20);i<=(d.width/2)-20;i++){
y=(int) (float) (-20*(an*i+bn));
c=(int) (float) (-20*(an*(i+1)+bn));
if (y>=-1*((d.height)+100) && c<=(d.height)+50 && y<=(d.height)+50 && c>=-1*((d.height)+50)){
g.setColor(Color.red);
g.drawLine( 20*i, y, 20*(i+1),c);
}
}
}
if(an1!=0){
g.setFont(fb);
g.setColor(Color.blue);
g.drawString("x1="+an1+"* x2 +"+bn1+"",-1*((d.width/2)-30),-1*((d.height/2)-42));
for(int i=-1*((d.width/2)-20);i<=(d.width/2)-20;i++){
y=(int) (float) (-20*(an1*i+bn1));
c=(int) (float) (-20*(an1*(i+1)+bn1));
if (y>=-1*((d.height)+100) && c<=(d.height)+50 && y<=(d.height)+50 && c>=-1*((d.height)+50)){
g.setColor(Color.blue);
g.drawLine( 20*i, y, 20*(i+1),c);
}
}
}
if(an2!=0){
g.setFont(fb);
g.setColor(Color.green);
g.drawString("x1="+an2+"* x2 +"+bn2+"",-1*((d.width/2)-30),-1*((d.height/2)-72));
for(int i=-1*((d.width/2)-20);i<=(d.width/2)-20;i++){
y=(int) (float) (-20*(an2*i+bn2));
c=(int) (float) (-20*(an2*(i+1)+bn2));
if (y>=-1*((d.height)+100) && c<=(d.height)+50 && y<=(d.height)+50 && c>=-1*((d.height)+50)){
g.setColor(Color.green);
g.drawLine( 20*i, y, 20*(i+1),c);
}
}
}
int xPoints[] = {(int)an, (int)an1,(int) an2};
int yPoints[] = {(int)bn, (int)bn1,(int) bn2};
g.fillPolygon(xPoints, yPoints, c);
}
catch (NumberFormatException e)
{
Font bug = new Font( "SansSerif", Font.BOLD, 20);
g.setFont(bug);
g.setColor(Color.black);
g.drawString("SPRAWDZ DANE",-1*((d.width/2)-300),-30);
}
}
}
public void actionPerformed(ActionEvent e){
getParent().repaint();
}
}
public class Wykresy{
public static void main(String args[]){
// int i = (int)f;
final JFrame okno = new JFrame("Ap");
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel ramka = new JLabel("Metoda graficzna ", JLabel.CENTER);
ramka.setPreferredSize(new Dimension(400,25));
JPanel panel = new JPanel();
JLabel opis0 = new JLabel(" ", JLabel.RIGHT);
JLabel opis1 = new JLabel("x1 = ", JLabel.RIGHT);
JLabel opis1a = new JLabel("x2 + ", JLabel.CENTER);
JLabel opis2 = new JLabel("x1 = ", JLabel.RIGHT);
JLabel opis2a = new JLabel("x2 + ", JLabel.CENTER);
JLabel opis2b = new JLabel(" ", JLabel.CENTER);
JLabel opis3 = new JLabel(" ", JLabel.CENTER);
JLabel opis3bis = new JLabel(" x1 = ", JLabel.RIGHT);
JLabel opis3a = new JLabel("x2 + ", JLabel.CENTER);
JLabel opis3b = new JLabel("<- Ograniczenie -3x1 - 2x2 ", JLabel.CENTER);
JTextField parametr1 = new JTextField("0.5");
JTextField parametr2 = new JTextField("-1");
JTextField parametr3 = new JTextField("-2");
JTextField parametr4 = new JTextField("8");
JTextField parametr5 = new JTextField("-0.6");
JTextField parametr6 = new JTextField("6");
JButton przyciskRysuj = new JButton("Rysuj wykresy"); // Tworzy przycisk 'Rysuj'
panel.setLayout(new GridLayout(3,6));
panel.add(opis1);
panel.add(parametr1);
panel.add(opis1a);
panel.add(parametr2);
panel.add(opis0);
panel.add(przyciskRysuj);
panel.add(opis2);
panel.add(parametr3);
panel.add(opis2a);
panel.add(parametr4);
panel.add(opis2b);
panel.add(opis3);
panel.add(opis3bis);
panel.add(parametr5);
panel.add(opis3a);
panel.add(parametr6);
panel.add(opis3b);
JPanel panelGraf = new JPanel();
panelGraf.setLayout(new GridLayout(1,3));
PanelGrafi panelGrafi = new PanelGrafi(parametr1,parametr2,parametr3,parametr4,parametr5,parametr6);
panelGraf.add(panelGrafi);
przyciskRysuj.addActionListener(panelGrafi);
Container wnetrzeOkna = okno.getContentPane();
wnetrzeOkna.add(ramka, BorderLayout.NORTH);
wnetrzeOkna.add(panel, BorderLayout.SOUTH);
wnetrzeOkna.add(panelGraf, BorderLayout.CENTER);
okno.setExtendedState (Frame.MAXIMIZED_BOTH);
okno.setVisible(true);
}
}