我有一个JApplet的具有显示3组件。 (2 JPanels和1 paint方法) [英] I have a JApplet which has to display 3 Components. (2 JPanels and 1 Paint Method)

查看:449
本文介绍了我有一个JApplet的具有显示3组件。 (2 JPanels和1 paint方法)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我有,以允许用户使用二次方程绘制的曲线图的分配。

I have an assignment in which I have to allow a user to plot a graph using a quadratic equation.

我设法绘制图形的骨架,现在我想显示控制面板,为用户输入的值。

I managed to draw the skeleton of the graph, and now I am trying to display the "control panel" for the user to input the values.

我有4个文件:


  • graph.java

  • panel.java

  • panelB.java

  • panelC.java

  • graph.java
  • panel.java
  • panelB.java
  • panelC.java

我的问题是,当我运行code则仅显示 panel.java 即使在容器中,它应该显示其它两个面板。

My problem is when I run the code it is displaying only the panel.java even in the container where it should display the other two panels.

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.JPanel;


public class panel extends JPanel {

    public panel(){
        this.setBackground(Color.yellow);
    }
}

任何人都可以请告知我应该做的改变来解决这个问题?

Can anyone please advise what changes I should do to fix this problem?

我已经做了一些改变graph.java文件:

I have done some changes to the graph.java file:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.*;

public class GraphApplet extends JApplet{


    public GraphApplet(){

    raph p = new Graph();//graph

    p.setPreferredSize(new Dimension(760,500));
        conn.add(p,BorderLayout.CENTER);
    }

和现在正在显示所有的图形。

And now all that is being displayed is the graph.

至于其他code,我也做了一些修改类名:

Regarding the other code, I also made some changes to the class names:

gnjk;的.java

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.JPanel;


public class Graph extends JPanel {

public Graph(){
    this.setBackground(Color.yellow);
    }

    public void paintComponent(Graphics p) {

        super.paintComponent(p);

        Graphics2D graph = (Graphics2D)p;

        this.setBackground(Color.yellow);//set background color.

        int x,y,y1,x1,a,b,p1x,p1y,p2x,p2y;

        int xstart = 7;
        int ystart = 1;

        int xfinish = 3;

......

.......

bhfvhn.java

import javax.swing.*;

import java.awt.*;

import javax.swing.JPanel;


public class ControlsA extends JPanel{

public void init (Box g) {

    a = Box.createVerticalBox();
    a.add(new JLabel("Please enter the values below:"));
    a.add(new JLabel("h"));


}

}

jknmk.java

import javax.swing.*;

import java.awt.Component;
import java.awt.Dimension;

public class ControlsB extends JPanel{

public void init (Box b) {

    b = Box.createHorizontalBox();
    b.add(new JLabel("a"));
    JTextField f1 = new JTextField("0.0");
    f1.setMaximumSize(new Dimension(100,30));
    b.add(f1);


}
}


下面是一个更新到我的项目:


Here is an updated to my project:

jkl.java

import java.awt.BorderLayout;
import java.awt.Container;

public class GraphApplet extends JApplet{
  public GraphApplet() {
    public void init(){
        SwingUtilities.invokeLater(new Runnable() {

         public void run(){
             Container conn = getContentPane();
             conn.setLayout(new BorderLayout());

             Graph z = new Graph();
             conn.add(p,BorderLayout.CENTER);


             fasfae a = new ControlsA(box1);
             conn.add(a,BorderLayout.LINE_START);


             adsfawef b = new ControlsB(box2);
             conn.add(b,BorderLayout.PAGE_END);
         }
        });
        }
        }




    /*Container conn = getContentPane();
    conn.setLayout(new BorderLayout());     

    Graph p = new Graph();//graph

    p.setPreferredSize(new Dimension(460,560));
    conn.add(p,BorderLayout.CENTER);

    Box a = new Box(BoxLayout.Y_AXIS);

    a.setPreferredSize(new Dimension(50,50));
    conn.add(a,BorderLayout.EAST);

    Box b = new Box(BoxLayout.X_AXIS);

    b.setPreferredSize(new Dimension(201,50));
    conn.add(b,BorderLayout.SOUTH);*/
    //this code is commented not to loose it

vtk.java

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.JPanel;


class Graph extends JPanel {

public Graph(){
    this.setBackground(Color.yellow);
}
@Override
public Dimension getPreferredSize(){return (new Dimension(460,560)); }

public void paint(Graphics z) {



        Graphics graph = (Graphics2D)z;


        this.setBackground(Color.yellow).

        int x,y,y1,x1,a,b,p1x,p1y,p2x,p2y;

        //line co-ordinates
        //the numbers represent the number of boxes on the graph
        int xstart = 7;
        int ystart = 1;

        int x = 3;
        int y = 9;

        //other variables
        int i = 0;
        int i2 = 0;
        int m = 0;
        int n = 0;
        int m2 = 0;
        int n2 = 0;
        int f2 = 0;
        int g2 = 1;

        //ranges
        int f = 5;
        int g = -5;

        //change -ve num to +ve
        int g3 = Math.abs(g);

        int a1 = g3 + f;
        int b1 = a1;

        a = (Height);
        f = (Width);

        }
    }
}

// 6 variables the user has to input

}
@Override
public Dimension getPreferredSize() {return (new Dimension(200,100));}
}

nllkl.java

 @Override
 public Dimension getPreferredSize(){return (new Dimension(201,50));}
}

依然没有起色。我不明白是怎么回事。

Still no improvement. I cannot understand what is going on.

推荐答案

请尝试现在运行此code,告诉我这是接近你想要什么?如果可以,让我知道,这样我可以删除我的答案。不要看我做了更改:

Please try to run this code now, tell me is this closer to what you wanted ? if so do let me know, so that I can delete my answer. Do watch the changes I had done :


  • PanelC 类,它不使用的init()的方法,我
    做出的构造。

  • 在您的Graph类<我已经删除了所有集preferredSizes(...)
    电话,而是我已经覆盖的get preferredSize()每个
    类扩展的JP​​anel 。对于这次访问每一类面板,PanelB和
    PanelC。

  • 最后,我改变了供给尺寸值的JP​​anel
    这是进入左/ LINE_START 一边,一些可以
    可以看出

  • BEST的变化是使用EDT的 - 事件指派线程,好像你
    真的不知道在Swing 并发的

  • in your PanelC class, where instead of using init() method, I made the constructor.
  • Inside your Graph class< i had removed all setPreferredSizes(...) calls, and instead I had overridden getPreferredSize() for each Class extending JPanel. For this visit each Class Panel, PanelB and PanelC.
  • Lastly I had changed the Dimension values supplied to the JPanel, which is to go to the LEFT/LINE_START side, to something that can be seen
  • BEST CHANGE is the use of EDT - Event Dispatch Thread, seems like you really not aware of Concurrency in Swing
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class Graph extends JApplet{

    public void init(){

        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                Container conn = getContentPane();
                conn.setLayout(new BorderLayout());

                Panel p = new Panel();//graph
                conn.add(p,BorderLayout.CENTER);

                Box box1 = new Box(BoxLayout.Y_AXIS);
                PanelB a = new PanelB(box1);//vertical
                conn.add(a,BorderLayout.LINE_START);

                Box box2 = new Box(BoxLayout.X_AXIS);
                PanelC b = new PanelC(box2);//horizontal
                conn.add(b,BorderLayout.PAGE_END);
            }
        });
    }
}

class Panel extends JPanel {

    public Panel(){
        this.setBackground(Color.yellow);
    }

    @Override
    public Dimension getPreferredSize()
    {   
        return (new Dimension(460,560));
    }

    public void paintComponent(Graphics p) {

        super.paintComponent(p);

        Graphics2D graph = (Graphics2D)p;

        Dimension appletSize = this.getSize();
        int appletHeight = (int)(appletSize.height);
        int appletWidth = appletSize.width;

        this.setBackground(Color.yellow);//set background color.

        int x,y,y1,x1,a,b,p1x,p1y,p2x,p2y;

        //line co-ordinates
        //the numbers represent the number of boxes on the graph
        int xstart = 7;
        int ystart = 1;

        int xfinish = 3;
        int yfinish = 9;

        //other variables
        int i = 0;
        int i2 = 0;
        int m = 0;
        int n = 0;
        int m2 = 0;
        int n2 = 0;
        int f2 = 0;
        int g2 = 1;

        //ranges
        int f = 5;
        int g = -5;

        //change -ve num to +ve
        int g3 = Math.abs(g);

        int a1 = g3 + f;
        int b1 = a1;

        y1 = (appletHeight);
        x1 = (appletWidth);
        y = (appletHeight / 2);
        x = (appletWidth / 2);
        a = (appletWidth / a1);
        b = (appletHeight / b1);

        int d = (appletWidth / a1);
        int e = (appletHeight / b1);

        /**
         to determine the
         ammount of pixles there
         is in each box of the
         graph, both y-axis and 
         x-axis
         */
        int xbox = x1 / 10;
        int ybox = y1 / 10;

        //line variables
        //the xstart, ystart, etc represent the number of boxes

        //top point of the line on the graph
        p1x = xbox * xstart;//start x
        p1y = ybox * ystart;//start y

        //lowwer point of the line on the graph
        p2x = xbox * xfinish;//finish x
        p2y = ybox * yfinish;//finish y

        //draw y-axis numbers 
        //(+ve)
        while(f != 0){
            String s = String.valueOf(f);
            p.drawString(s,(x + 5),m + 13);
            m = m + b;
            f = f - 1;
        }
        //(-ve)
        m2 = y;
        while(f2 != g-1){
            String u = String.valueOf(f2);
            p.drawString(u,(x + 5),m2 - 3);
            m2 = m2 + b;
            f2 = f2 - 1;
        }
        //draw x-axis numbers.
        //(-ve)
        while(g != 0){
            String t = String.valueOf(g);
            p.drawString(t,n,y - 5);
            n = n + a;
            g = g + 1;
        }
        //(+ve)
        n2 = x + a;
        while(g2 != g3+1){
            String vw = String.valueOf(g2);
            p.drawString(vw,n2 -10,y - 5);
            n2 = n2 + a;
            g2 = g2 + 1;
        }

        BasicStroke aLine2 = new BasicStroke(1.0F,
           BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
        graph.setStroke(aLine2);

        //notch on numbers and grid lines
        //left to right, top to bottom notches
        int v2 = -5;
        int v5 = 0;
        while(i <= a1-1){
            p.setColor(Color.lightGray);//lightgray line
            p.drawLine(a,0,a,y1);//vertical lightgray
            p.drawLine(0,b,x1,b);//horizontal lightgray
            a = a + d;
            b = b + e;
            i = i + 1;
        }
        //notches
        while(i2 <= a1){
            p.setColor(Color.blue);//notch color
            p.drawString("x",v2+2,y+3);//xaxis
            p.drawString("x",x-4,v5+4);//yaxis
            v5 = v5 + e;
            v2 = v2 + d;
            i2 = i2 + 1;
        }

        //draws the border of the graph
        p.setColor(Color.black);
        Rectangle2D.Float rect = new Rectangle2D.Float(0,0,x1,y1);
        BasicStroke aLine = new BasicStroke(2.5F, 
               BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
        graph.setStroke(aLine);
        graph.draw(rect);

        //draw cross
        BasicStroke aLine3 = new BasicStroke(2.5F,
                     BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
        graph.setStroke(aLine3);
        p.drawLine(x,0,x,y1); //vertical line
        p.drawLine(0,y,x1,y); //horizontal line

        //display the value of graph width and graph height
        String aw = String.valueOf(x1);
        p.drawString("Graph Width = ", 50,90);
        p.drawString(aw,150,90);
        p.drawString("Graph Height = ", 50,110);
        String ah = String.valueOf(y1);
        p.drawString(ah,156,110);

        //draw line on graph

        BasicStroke aLine4 = new BasicStroke(1.5F,
                         BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
        graph.setStroke(aLine4);
        p.setColor(Color.red);

        if(p1x <= x1 && p2x <= x1 && p1y <= y1 && p2y <= y1){
            p.drawLine(p1x,p1y,p2x,p2y);
            Color c = new Color(0,0,0);
            p.setColor(c);
            p.drawString("X", p1x-4,p1y+4);
            p.drawString("X", p2x-4,p2y+4);
        }
        else{
            p.setColor(Color.black);
            p.drawRect(48,34,223,35);
            p.setColor(Color.white);
            p.fillRect(49,35,222,34);
            p.setColor(Color.red);
            p.drawString("Wrong co-ordinates!!!", 50,50);
            p.drawString("Values exceede applet dimensions.", 50,65);
        }
    }
}

class PanelB extends JPanel{

    public PanelB (Box a) {

        a = Box.createVerticalBox();
        a.add(new JLabel("Please enter the values below:"));
        a.add(new JLabel("a"));
        JTextField g1 = new JTextField("0.0");
        g1.setMaximumSize(new Dimension(100,30));
        a.add(g1);
        a.add(new JLabel("b"));
        JTextField g2 = new JTextField("0.0");
        g2.setMaximumSize(new Dimension(100,30));
        a.add(g2);
        a.add(new JLabel("c"));
        JTextField g3 = new JTextField("0.0");
        g3.setMaximumSize(new Dimension(100,30));
        a.add(g3);
        a.add(new JLabel("d"));
        JTextField g4 = new JTextField("0.0");
        g4.setMaximumSize(new Dimension(100,30));
        a.add(g4);
        a.add(new JButton("Plot"));
        a.add(new JButton("Refine"));
        add(a);
    }

    @Override
    public Dimension getPreferredSize()
    {   
        return (new Dimension(200,100));
    }
}

class PanelC extends JPanel{

    public PanelC (Box b) {

        b = Box.createHorizontalBox();
        b.add(new JLabel("a"));
        JTextField f1 = new JTextField("0.0");
        f1.setMaximumSize(new Dimension(100,30));
        b.add(f1);
        b.add(new JLabel("b"));
        JTextField f2 = new JTextField("0.0");
        f2.setMaximumSize(new Dimension(100,30));
        b.add(f2);
        b.add(new JLabel("c"));
        JTextField f3 = new JTextField("0.0");
        f3.setMaximumSize(new Dimension(100,30));
        b.add(f3);
        b.add(new JLabel("d"));
        JTextField f4 = new JTextField("0.0");
        f4.setMaximumSize(new Dimension(100,30));
        b.add(f4);
        b.add(new JButton("Plot"));
        b.add(new JButton("Refine"));
        add(b);
    }

    @Override
    public Dimension getPreferredSize()
    {   
        return (new Dimension(201,50));
    }
}

下面是我使用的HTML文件:

Here is the HTML file I used :

<html>
    <p> This file launches the 'Graph' applet: Graph.class! </p>  
    <applet code= "Graph.class" height = 550 width = 1000>
        No Java?!
    </applet>
 </html>

下面是我得到的输出:

这篇关于我有一个JApplet的具有显示3组件。 (2 JPanels和1 paint方法)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆