簡體   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