0

This is a program run within a graphical user interface, to produce a geological fault. You should be able to choose a varying extension through the checkbox, then hit display for the canvas to be repainted. However, the canvas does not repaint and update unless the applet viewer is changed in size (minimized, maximized etc). I've made changes based on duplicate/similar questions but am still having problems

Help would be much appreciated,

thanks

import java.awt.*;
import javax.swing.*;
import java.awt.event.*; //Import event handler classes
import java.awt.geom.*; // Geom packages

public class Listric_gui extends JFrame 
                            implements ActionListener, ItemListener {

JPanel pane = new JPanel ();
JComboBox Extension;
static MyCanvas can1;
//Class Variables 
static float[]x = new float[201]; 
static float[]y = new float[201];
static float[] hwd = new float [201];
//static float Dip = 0f;
static int end = 200;
static int i, e1;






static int x_ending=160, y_ending = 35, ticksize=5;
static float x_orig = 50f, y_orig=50f, x_scale=4f, y_scale=5f,hwd_orig=50f,hwd_scale=5f;  

    Listric_gui () {
     try{
            UIManager.setLookAndFeel (
            //"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            System.err.println("Can't set look and feel: " + e);
        }

    GridBagLayout gridbag = new GridBagLayout();
    GridBagConstraints constraints = new GridBagConstraints();
    pane.setLayout(gridbag);
    setBackground(Color.lightGray);

    //Title
    buildConstraints(constraints, 0,0,5,1,0,10);
    constraints.fill = GridBagConstraints.BOTH;
    Font f = new Font ("Helvetica", Font.BOLD, 22);
    JLabel label1 = new JLabel("Fault Modelling Program", JLabel.CENTER);
    label1.setFont (f);
    //label1.setBackground(Color.white);
    label1.setBackground(Color.red);
    gridbag.setConstraints(label1, constraints);
    pane.add(label1);


    //Initialise Button objects
    //File
        buildConstraints(constraints, 0, 1, 1, 1, 1, 10);
        constraints.fill = GridBagConstraints.BOTH;
        Font f1 = new Font("Helvetica", Font.BOLD, 14);
        JButton file = new JButton("File");
        gridbag.setConstraints(file, constraints);
        file.setFont(f1);
        pane.add(file);

    //Input
        buildConstraints(constraints, 1, 1, 1, 1, 1, 0);
        constraints.fill = GridBagConstraints.BOTH;
        //constraints.ipadx = 10;
        JButton input = new JButton ("Input");
        gridbag.setConstraints(input,constraints);
        input.setFont(f1);
        pane.add(input);

    //Run
        buildConstraints(constraints, 2, 1, 1, 1, 1, 0);
        constraints.fill = GridBagConstraints.BOTH;
        JButton run = new JButton ("Run");
        gridbag.setConstraints(run, constraints);
        run.setFont(f1);
        pane.add(run);

    //Display Button
        buildConstraints(constraints, 3, 1, 1, 1, 1, 0);
        constraints.fill = GridBagConstraints.BOTH;
        JButton display = new JButton ("Display"); 
        gridbag.setConstraints(display, constraints);
        display.setFont(f1);
        pane.add(display);

    //Quit button
        buildConstraints(constraints, 4, 1, 1, 1, 1, 0);
        constraints.fill = GridBagConstraints.BOTH;
        JButton quit = new JButton ("Quit");
        gridbag.setConstraints(quit, constraints);
        quit.setFont(f1);
        pane.add(quit);

    //Fault Geometry label 

        buildConstraints(constraints, 0, 2, 1, 1, 1, 10);
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.SOUTH;
        JLabel label2 = new JLabel ("Fault Geometry", JLabel.CENTER);
        label2.setFont(f1);
        gridbag.setConstraints(label2, constraints);
        pane.add(label2);

    //Geometry - Listric

        buildConstraints(constraints, 0, 3, 1, 1, 1, 10);
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.NORTH;
        JCheckBox C1 = new JCheckBox ("Listric");
        gridbag.setConstraints(C1, constraints);
        pane.add(C1);

    // Geometry - Planar

        /*buildConstraints(constraints, 0, 4, 1, 1, 1, 10);
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.NORTH;
        JCheckBox C2 = new JCheckBox ("Planar");
        gridbag.setConstraints(C2, constraints);
        pane.add(C2);*/

    //Checkbox group define so that only one selected at time
        ButtonGroup bg = new ButtonGroup ();
        bg.add(C1);
        //bg.add(C2);

    //Extension Label
        buildConstraints(constraints, 0, 4, 1, 1, 1, 10);
        constraints.anchor = GridBagConstraints.SOUTH;
        JLabel label3 = new JLabel ("Extension", JLabel.CENTER);
        label3.setFont(f1);
        gridbag.setConstraints(label3, constraints);
        pane.add(label3);

    //Extension Choice
        buildConstraints(constraints, 0, 5, 1, 1, 1, 10);
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.NORTH;
        JComboBox Extension = new JComboBox ();
        Extension.addItem ("0 km");
        Extension.addItem ("5 km");
        Extension.addItem ("10 km");
        Extension.addItem ("15 km");
        Extension.addItem ("20 km");
        Extension.addItem ("25 km");
        Extension.addItem ("30 km");
        gridbag.setConstraints(Extension, constraints);
        pane.add(Extension);

    //Draw Canvas
        buildConstraints(constraints, 1, 2, 4, 5, 0, 0);
        constraints.fill = GridBagConstraints.BOTH;
        MyCanvas can1 = new MyCanvas (); // paint method in seperate class
        gridbag.setConstraints(can1, constraints);
        can1.setBackground(Color.white);
        pane.add(can1);

        //Add all event listeners to components
        display.addActionListener(this);
        quit.addActionListener(this);
        Extension.addItemListener(this);
        run.addActionListener(this);
        //can1.addActionListener(this);
        setContentPane(pane);
    }
    static void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy){
        gbc.gridx = gx;
        gbc.gridy = gy;
        gbc.gridwidth = gw;
        gbc.gridheight = gh;
        gbc.weightx = wx;
        gbc.weighty = wy;
    }

    public Insets getInsets() {
        return new Insets (10, 10, 10, 10);
    }

//declare actionlistener method
public void actionPerformed (ActionEvent ae) {
        String label = ae.getActionCommand();
        if (label == "Display") {
            can1= new MyCanvas();
            Modelling m1 = new Modelling ();
            //if (can1 != null) {
            can1.revalidate();
            can1.repaint();
            can1.setVisible(true);
            }else if (label == "Quit")
            System.exit(0);
    }
   public void itemStateChanged (ItemEvent evt) {
        String s = (String) evt.getItem ();
        System.out.println("Item: " + s );
        int state = evt.getStateChange();
        System.out.println("State: "+ ((state == ItemEvent.SELECTED) ? "Selected": "Deselected"));
        System.out.println("Setting new Extension string...");
           if (s == "0 km")
               e1 = (int) 0f;
           else if (s == "5 km")
               e1 = (int) 5f;
           else if (s == "10 km")
               e1 = (int) 10f;
           else if (s == "15 km")
               e1 = (int) 15f;
           else if (s == "20 km")
               e1 = (int) 20f;
           else if (s == "25 km")
               e1 = (int) 25f;
           else if (s == "30 km")
               e1 = (int) 30f;
        }
}
//End of controlling class
//Class for modelling fault
class Modelling {
Modelling () {
    calc ();
}
private void calc () {
    float Sum1, Sum2, Sum3, Sum4;//Initialise variables
    float A = 30f;
float B = 25f;
float C = -1f;
float Zd = 20f;
//float x0 = 60f;
float D = 1f;
    int k;
        //Loop for calculating fault 1 coordinates
        for(k=0;k<=Listric_gui.x_ending;k++){   
        Listric_gui.x[k] = (float) k;
        Sum1 = (Listric_gui.x[k] - A);
        Sum2 = ((Sum1/Zd)*C);
        Sum3 = D - ((float)Math.exp(Sum2));
        Sum4 = (A * Sum3);
                    Listric_gui.y[k] = Sum4; 
        if(Listric_gui.x[k]<=30) {
           Listric_gui.y[k]=0;
        }

        //System.out.println("x = " +x[k] + " y = "+ y[k]);
        }
        //Loop for calculating hangingwall deformation

        //Initialise Variables

        Listric_gui.hwd [k] = (float) k;
        //Listric_gui.e1 = 30;
        for(k=0;k<=Listric_gui.x_ending;k++){
        //hwd [k] = (-(Sum4 - (A *(D - ((float)Math.exp(Sum2 - e1))))));
            Listric_gui.hwd[k] = 0f;
        if(Listric_gui.x[k]>30) 
            Listric_gui.hwd[k] = Listric_gui.y[k]-Listric_gui.y[k-Listric_gui.e1];
System.out.println("x = " + k + " hwd = "+ Listric_gui.hwd [k]);
}
}
}

//Listener Method
//draw Class
class MyCanvas extends JPanel {
int k, i;
    public void paintComponent (Graphics screen) {
        super.paintComponent(screen);
        Graphics2D screen2D = (Graphics2D) screen;

    screen2D.setColor(Color.red);
    GeneralPath ln = new GeneralPath();
    ln.moveTo(Listric_gui.x_orig,Listric_gui.y_orig);
    for(k=0;k<=Listric_gui.x_ending;k++) {
    ln.lineTo((Listric_gui.x[k]*Listric_gui.x_scale)+Listric_gui.x_orig,(Listric_gui.y_orig+(Listric_gui.y[k]*Listric_gui.y_scale)));
    ln.closePath();
    screen2D.fill(ln);
    }
    GeneralPath ln2 = new GeneralPath();
    ln2.moveTo(Listric_gui.x_orig,Listric_gui.hwd_orig);
    for(k=0;k<=Listric_gui.x_ending;k++) {
    ln2.lineTo((Listric_gui.x[k]*Listric_gui.x_scale)+Listric_gui.x_orig,(Listric_gui.y_orig+(Listric_gui.hwd[k]*Listric_gui.hwd_scale)));
    ln2.closePath();
    screen2D.fill(ln2);
    }
    //Fault profile graphically
    screen2D.setColor(Color.red);
    GeneralPath ln3 = new GeneralPath ();
    ln3.moveTo(Listric_gui.x_orig,Listric_gui.y_orig);
    for(k=0;k<=Listric_gui.x_ending;k++) {
    ln3.lineTo((Listric_gui.x[k]*Listric_gui.x_scale)+Listric_gui.x_orig,(Listric_gui.y_orig+(Listric_gui.hwd[k]*Listric_gui.hwd_scale)));
    screen2D.draw(ln3);
    }
    //draw footwall
    GeneralPath ln4 = new GeneralPath ();
    ln4.moveTo(Listric_gui.x_orig,Listric_gui.y_orig);
    for(k=0;k<=Listric_gui.x_ending;k++) {
    ln4.lineTo((Listric_gui.x[k]*Listric_gui.x_scale)+Listric_gui.x_orig,(Listric_gui.y_orig+(Listric_gui.y[k]*Listric_gui.y_scale)));
    screen2D.draw(ln4);
    }
//x axis
BasicStroke xpen = new BasicStroke(2f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
screen2D.setStroke(xpen);
screen2D.setFont(new Font("Serif", Font.PLAIN, 11));
screen2D.setColor(Color.black);
GeneralPath xaxis = new GeneralPath();
xaxis.moveTo(Listric_gui.x_orig,(Listric_gui.y_orig+(Listric_gui.y_ending*Listric_gui.y_scale)));
xaxis.lineTo((Listric_gui.x_orig+(Listric_gui.x_ending*Listric_gui.x_scale)),(Listric_gui.y_orig+(Listric_gui.y_ending*Listric_gui.y_scale)));
for (i=0; i <=(Listric_gui.x_ending); i=i+20){    
    Line2D.Float ticks = new Line2D.Float(((i*Listric_gui.x_scale)+Listric_gui.x_orig), ((Listric_gui.y_orig)+(Listric_gui.y_ending*Listric_gui.y_scale)), ((i*Listric_gui.x_scale)+Listric_gui.x_orig), ((Listric_gui.y_orig+Listric_gui.ticksize)+(Listric_gui.y_ending*Listric_gui.y_scale)));
    screen2D.draw(ticks);
    screen2D.drawString(""+i, ((i*Listric_gui.x_scale)+Listric_gui.x_orig), ((Listric_gui.y_orig)+(Listric_gui.y_ending*Listric_gui.y_scale))+20);
}

//y axis
BasicStroke ypen = new BasicStroke(2f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
screen2D.setStroke(ypen);
screen2D.setFont(new Font("Serif", Font.PLAIN, 11));
screen2D.setColor(Color.black);
GeneralPath yaxis = new GeneralPath();
yaxis.moveTo(Listric_gui.x_orig,Listric_gui.y_orig);
yaxis.lineTo(Listric_gui.x_orig,(Listric_gui.y_orig+(Listric_gui.y_ending*Listric_gui.y_scale)));
screen2D.draw(yaxis);
for (i=0; i <=Listric_gui.y_ending; i=i+5){  
    screen2D.drawString(""+i, ((Listric_gui.x_orig))-15, (Listric_gui.y_orig+(i*Listric_gui.y_scale)));
    Line2D.Float yticks = new Line2D.Float(((Listric_gui.x_orig)), (Listric_gui.y_orig+(i*Listric_gui.y_scale)), (((Listric_gui.x_orig+Listric_gui.ticksize))), (Listric_gui.y_orig+(i*Listric_gui.y_scale)));
    screen2D.draw(yticks);    
}

//Y axis label
screen2D.setFont(new Font("Serif", Font.PLAIN, 14));
screen2D.draw(xaxis);
AffineTransform orig = screen2D.getTransform();

screen2D.drawString("Depth(km)", Listric_gui.x_orig-20, Listric_gui.y_orig-20);
screen2D.rotate(-Math.PI/2);
screen2D.setTransform(orig);

//X axis label
screen2D.setFont(new Font("Serif", Font.PLAIN, 14));
screen2D.drawString("Distance (km)", Listric_gui.x_orig+(Listric_gui.x_ending*Listric_gui.x_scale/2), Listric_gui.y_orig+(Listric_gui.y_ending*Listric_gui.y_scale)+40);

//Values
screen2D.setFont(new Font("Serif", Font.PLAIN, 10));
screen2D.setColor(Color.red);
int y_val = 25;
for (k = 0; k <=160; k=k+5){
    screen2D.drawString(" X = " + String.valueOf(Listric_gui.x[k]) + " Y = " + String.valueOf(Listric_gui.y[k]), (Listric_gui.x_orig+(Listric_gui.x_ending*Listric_gui.x_scale)+35), y_val);
    y_val = y_val+10;
}
//print screen for hwd values
int y_val2 = 25;
for (k = 0; k <=160; k=k+5){
    screen2D.drawString("X = " + String.valueOf(Listric_gui.x [k])+ " Hwd = " + String.valueOf(Listric_gui.hwd[k]),(Listric_gui.x_orig+(Listric_gui.x_ending*Listric_gui.x_scale)+155),y_val2);
    y_val2 = y_val2+10;
}

//Title
screen2D.setColor(Color.black);
Font f1 = new Font("Helvetica", Font.BOLD, 24);
screen2D.setFont(f1);
screen2D.drawString("LISTRIC FAULT", (Listric_gui.x_ending*Listric_gui.x_scale/2)+Listric_gui.x_orig,(Listric_gui.y_orig-10));

}
//Define main block
    public static void main (String args[]){
        JFrame frame = new Listric_gui();
        //Method to exit
    WindowListener l = new WindowAdapter (){
                    public void windowClosing (WindowEvent e) {
                        System.exit (0);
                    }
    };
                    frame.addWindowListener (l);
    //frame.setSize(800,600);
    frame.pack();
    frame.revalidate();
    frame.repaint();
    frame.setVisible (true);
    if(Listric_gui.can1 != null){
    Listric_gui.can1.revalidate();
    Listric_gui.can1.repaint();
    Listric_gui.can1.setVisible(true);
}
}  
   private static final int PREF_W = 600;
   private static final int PREF_H = 400;

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }
}

0 Answers0