繁体   English   中英

摆动JFrame水平滚动条

[英]Swing JFrame horizontal scrollbar

我正在尝试使用新的Java Swing制作图形。 在我的程序中,我从文本文件中获取一些随机数,并根据这些随机数创建图形。 我已经能够制作图形,但是我需要添加滚动条以查看完整的图形,该图形足够长以适合生成的窗口。 任何人都可以修改或建议我一个非常简单的方法

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
 import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

import javax.swing.*; // used to access the JFrame, JPanel, JLabel, and JScrollPane class
import java.awt.*; // used to access the Font class

public class NewLine {
   MyPanel panel;
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI(); 
            }
        });
    }

    private static void createAndShowGUI() {
        System.out.println("Created GUI on EDT? "+
        SwingUtilities.isEventDispatchThread());
        JFrame f = new JFrame("Swing Paint Demo");




 f.setResizable(true);
 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 //panel=new MyPanel();  

        f.add(new MyPanel());
        f.pack();
        f.setVisible(true);
    }
}

class MyPanel extends JPanel {
    private static final Color GRAPH_COLOR = Color.red;
    private static final Color GRID_COLOR = Color.gray;

    public MyPanel() {
        JScrollPane scroll = new JScrollPane(this, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        //JLabel label = new JLabel("This is a JScrollPane Component");

    }

    public Dimension getPreferredSize() {
        return new Dimension(250,200);
    }


    void drawLines(Graphics g) {


        Graphics2D g2d = (Graphics2D) g;

         g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        g2d.setColor(GRID_COLOR);


         for(int x =20 ; x <=1020; x +=25 ){
         g2d.drawLine(x, 70, x, 500);  // Y AXIS
         }
         for(int y =70 ; y <=500; y +=25 ){
         g2d.drawLine(20, y, 1020, y); // X axis
         }
         g2d.setColor(GRAPH_COLOR);

         int x = 20;

         int diff = 5;
                    try{    
                        FileInputStream fstream = new FileInputStream("data.txt");
                        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

                        String strLine;

                //Read File Line By Line
                int counter = 0;
                int prevPoint = 0;
                        while ((strLine = br.readLine()) != null)   {
                  // Print the content on the console
                        //x +=5

                        if( counter == 0){
                        System.out.println (strLine);
                        //g2d.drawLine(x, 500-312, x +=15, Integer.parseInt(strLine));
                        }
                        counter ++;
                        g2d.drawLine(x , 500-prevPoint, x +=5, 500-Integer.parseInt(strLine));

                        prevPoint =  Integer.parseInt(strLine);

                }
                //Close the input stream
                        br.close();
                        }
                        catch(Exception ec){}




    }



    public void paint(Graphics g) {
        super.paint(g);
        drawLines(g);
    }
}

文本文件的值如下所示,

360 334 327 313 312 302 301 294 292 289 283 287 278 282 275 277 274 273 273 268 273 266 273 266 270 267 267 ....

提前致谢。 阿努邦。

更换

f.add(new MyPanel());

通过

JScrollPane scroll = new JScrollPane(
        new MyPanel(), 
        ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS
);
f.add(scroll);

并替换这个

public Dimension getPreferredSize() {
    return new Dimension(250,200);
}

这样

public Dimension getPreferredSize() {
    return new Dimension(1020,500);
}

Tadaaa! 在此处输入图片说明

  1. 解析数据的东西应该在构造函数中:

     try{ FileInputStream fstream = new FileInputStream("data.txt"); // ... etc. 
  2. 图的值应存储在声明为类属性的数组或集合中。
  3. 存储为类属性,该数据可在计算首选大小或绘画时使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM