| Код | public class JTextReader extends JComponent { private String fileName; private String encoding; private BufferedImage img; private Font smallFont; private Font bigFont; private int currentY;
public JTextReader(String fileName, String encoding) { this.fileName = fileName; this.encoding = encoding; img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); bigFont = new Font("Serif", Font.BOLD, 14); smallFont = new Font("Serif", Font.PLAIN, 10); currentY = 20; setOpaque(true); }
private void updateBuffer() { if(getWidth() != img.getWidth() || getHeight() != img.getHeight()) img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D) img.getGraphics(); g2.clearRect(0, 0, img.getWidth(), img.getHeight()); File file = new File(fileName); if(file.exists()) { FontMetrics arialBigMetrics = g2.getFontMetrics(bigFont); FontMetrics arialSmallMetrics = g2.getFontMetrics(smallFont); Rectangle2D rect = arialBigMetrics.getStringBounds(fileName, g2); int dy = (int) rect.getHeight(); int y = currentY; try { BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding)); String line; boolean useBigFont = true; while((line = reader.readLine()) != null) { if(useBigFont) g2.setFont(bigFont); else g2.setFont(smallFont);
g2.drawString(line, (float)10, (float)y); y += dy; useBigFont = !useBigFont;
if(y > img.getHeight()) break; } reader.close(); } catch(Exception ex) { ex.printStackTrace(); } } }
public void scroll(int amount) { currentY += amount; updateBuffer(); repaint(); }
protected void paintComponent(Graphics g) { if(getWidth() != img.getWidth() || getHeight() != img.getHeight()) updateBuffer();
g.setColor(getBackground()); g.clearRect(0, 0, getWidth(), getHeight()); g.drawImage(img, 0, 0, this); }
public static void main(String[] args) { final JTextReader textReader = new JTextReader("C:\\TMP\\RDBMS\\admin.txt", "Cp866"); JButton upButton = new JButton("UP"); upButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textReader.scroll(30); } });
JButton downButton = new JButton("DOWN"); downButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textReader.scroll(-30); } });
JFrame frame = new JFrame("Text frame"); frame.getContentPane().add(textReader, BorderLayout.CENTER); frame.getContentPane().add(upButton, BorderLayout.NORTH); frame.getContentPane().add(downButton, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setSize(800, 600); frame.setLocationRelativeTo(null); frame.setVisible(true); } } |
|