图形用户界面不使用操作按钮重新绘制画布

时间:2015-12-02 12:12:45

标签: java user-interface

这是在图形用户界面中运行的程序,用于产生地质故障。您应该可以通过复选框选择不同的扩展名,然后点击显示以重新绘制画布。但是,除非更改applet查看器的大小(最小化,最大化等),否则画布不会重新绘制和更新。 我已根据重复/类似问题进行了更改,但仍然遇到问题

非常感谢帮助,

感谢

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 个答案:

没有答案