Формат EDI

Никогда не делайте этого при получении объекта Graphics из компонента:

Graphics g = this.getGraphics();

Полученный таким образом объект Graphics не будет долговечным, и это может привести к либо NPE (например, вы получаете ) или изображение, которое не сохраняется при копировании. Вместо этого сделайте свой чертеж в методе paintComponent. Обратите внимание, что вы можете вызвать repaint(...) и указать конкретный прямоугольник для рисования, передав параметр Rectangle.

Обратите внимание, что вы можете вызвать getGraphics() на BufferedImage и нарисовать его, а затем нарисовать BufferedImage в вашем методе paintComponent, если вы хотите сделать точечный рисунок, который не перемещается.

Нежелательная рекомендация: избегайте вызова вашего класса Frame, так как это может привести к столкновению имени с классом java.awt.Frame, если вы «Не осторожны.

Например:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.*;

@SuppressWarnings("serial")
public class MyPanel extends JPanel {
    private static final int PREF_W = 400;
    private static final int PREF_H = PREF_W;
    private int cols;
    private int rows;
    private static final Color BG = Color.BLACK;
    private static final int GAP = 1;
    private BufferedImage img;
    private int rectWidth;
    private int rectHeight;

    public MyPanel(int rows, int cols) {
        this.cols = cols;
        this.rows = rows;
        img = createMyImage();
    }

    public void specificPaint(int coordinateX, int coordinateY, Color color) {
        Graphics g = img.getGraphics(); // get img's Graphics object
        int x = coordinateX * this.rectWidth + GAP;
        int y = coordinateY * this.rectHeight + GAP;
        g.setColor(color);
        g.fillRect(x, y, rectWidth - 2 * GAP, rectWidth - 2 * GAP);
        g.dispose();
        repaint();
    }

    private BufferedImage createMyImage() {
        img = new BufferedImage(PREF_W, PREF_H, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = img.createGraphics();
        g2.setBackground(BG);
        g2.clearRect(0, 0, img.getWidth(), img.getHeight());
        this.rectWidth = img.getWidth() / cols;
        this.rectHeight = img.getHeight() / rows;

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                int x = i * this.rectWidth + GAP;
                int y = j * this.rectHeight + GAP;
                g2.setColor(Color.WHITE);
                g2.fillRect(x, y, this.rectWidth - 2 * GAP, this.rectHeight - 2 * GAP);
            }
        }
        g2.dispose();
        return img;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (img != null) {
            g.drawImage(img, 0, 0, this);
        }

        // if you need to draw changing non-static images, do it here
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet() || img == null) {
            return super.getPreferredSize();
        }
        int w = img.getWidth();
        int h = img.getHeight();
        return new Dimension(w, h);
    }

    private static void createAndShowGui() {
        MyPanel modelMap = new MyPanel(50, 50);
        JFrame frame = new JFrame("MyPanel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(modelMap);
        frame.pack();
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        modelMap.specificPaint( 40,40,Color.RED );
        modelMap.specificPaint( 10,10,Color.RED );
        modelMap.specificPaint( 20,25,Color.BLUE );
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}
16
задан Miles 9 March 2009 в 14:53
поделиться

4 ответа

Сообщения EDI определяются стандартом X12.

при поиске синтаксических анализаторов X12 можно найти полезную информацию.

, Например, http://code.activestate.com/recipes/299485/

12
ответ дан 30 November 2019 в 21:54
поделиться

Это - файлы ANSI X12, стандартом управляют здесь , http://www.wpc-edi.com/

Информирует учебное руководство о структуре

Иерархия = Циклы-> Сегменты-> Элементы-> Элементы Sub.

Циклы ограничены или сегментами управления или логически на основе стандарта. Сегменты разделяются разделителем сегмента, по умолчанию ~ Элементы разделяются разделителем элемента, по умолчанию *, Элементы Sub разделяются sub разделителем элемента по умолчанию:

3
ответ дан 30 November 2019 в 21:54
поделиться

EDI обозначает электронный обмен данными...

Это не определенный серовато-синий формат. Вообще говоря, это - плоский текстовый файл данных, которые обычно имеют связанную опубликованную спецификацию. Например: "Положение 23-34 является исходной ценой как денежной стоимостью",

Вы действительно не будете в состоянии сделать что-либо полезное с файлом EDI, если у Вас не будет определенной спецификации, которая соглашается с ним.

, Как только Вы получаете спецификацию, я верю, как читать, файл будет довольно ясен.

Обычно процесс: 1. Читайте/Анализируйте файл EDI. 2. Выполните любую обработку/преобразование на тех данных, что Вы должны. 3. Сохраните его в свой локальный системный формат (таблицы, другие плоские файлы, безотносительно).

Жаль нет намного больше, мы могли сказать Вам, к сожалению.

3
ответ дан 30 November 2019 в 21:54
поделиться

EDI является разграниченным форматом файла. Необходимо знать и разделитель строки и разделитель столбца (из-за отсутствия лучшего ответа). Вы могли бы, например, видеть файл EDI со следующим форматом (от http://www.slik.co.nz/HTML_help/edi_file_format.htm ):

  HDR|6||||
  DTL|1|ABC|xyz|123|1
  DTL|13|ABC|animal|334|1
  DTL|11|ABC|sfdk|432|2
  DTL|12|ABC|wewdc|3|1
  DTL|14|ABC|qwdx|416|4

первая строка является заголовком и говорит Вам, что существует шесть записей. Другие строки являются строками детали.

X12 является одним стандартом, используемым EDI. Вы будете видеть X12, используемый обычно в здравоохранении. Если у Вас есть X12, можно исследовать стандарт X12, чтобы выяснить, как проанализировать.

3
ответ дан 30 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: