-1
テキストエディタを開発していて、メインフレームを持っていますが、一般的にはうまくいきますが、追加の単語を削除していますが、太字と下線の機能を追加しようとしています。私はこのことをどうやってやるのか分かりません。コードはすべて以下であるか、任意の提案もしそうなら、それは可能です:Javaテキストエディタの太字と下線の機能を追加
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
class Main
{
public static void main(String args[]) //
{ //
System.out.println("Application");
(new Application()).setVisible(true); // Start application
} //
}
/*
* Copy of file in a buffer in memory
* Which is a collection of lines
*/
class Buffer
{
private ArrayList<Line> file = new ArrayList<Line>(0);
private int lines = 0;
public int getNoLines()
{
return file.size();
}
public String getLine(int i)
{
if (i < lines)
{
return file.get(i).toString();
}
return "Error";
}
public void append(String s)
{
file.add(new Line(s));
lines++;
}
public void insert(int offset, int line, char c)
{
if (line <= lines)
{
file.get(line).insert(offset, c);
}
}
public void delete(int offset, int line)
{
if (line <= lines)
{
file.get(line).delete(offset);
}
}
public int getLineLength(int line)
{
return file.get(line).getLineLength();
}
}
/*
* A line of text in the buffer
*/
class Line
{
private StringBuffer aLine;
public Line(String s)
{
aLine = new StringBuffer(256);
aLine.append(s);
}
public String toString()
{
return aLine.toString();
}
public void setLine(String s)
{
aLine = new StringBuffer(256);
aLine.append(s);
}
public void insert(int pos, char c)
{
if (pos <= aLine.length())
{
aLine.insert(pos, c);
}
}
public void delete(int pos)
{
if (pos <= aLine.length())
{
aLine.delete(pos, pos+1);
}
}
public int getLineLength()
{
return aLine.length();
}
}
class Application extends JFrame // So graphical
{
private static final int H = 300; // Height of window
private static final int W = 400; // Width of window
private int x = 0;
private int y = 0;
Buffer file = new Buffer();
public Application()
{
// Fake reading in file
file.append("Line 1");
file.append("Line 2");
file.append("----------");
file.append("Line 3");
file.append("Line 4");
file.append("----------");
file.append("Line 5");
file.append("Line 6");
setSize(W, H); // Size of application
addKeyListener(new Transaction()); // Called when key press
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
class Transaction implements KeyListener // When character typed
{
public void keyPressed(KeyEvent e) // Obey this method
{
int ll = 0;
switch (e.getKeyCode()) // Character is
{
case KeyEvent.VK_LEFT: // Left Arrow
if (x > 0) x--;
break;
case KeyEvent.VK_RIGHT: // Right arrow
ll = file.getLineLength(y);
if (x < ll) x++;
break;
case KeyEvent.VK_UP: // Up arrow
if (y > 0) y--;
ll = file.getLineLength(y);
if (x > ll) x = ll;
break;
case KeyEvent.VK_DOWN: // Down arrow
int fl = file.getNoLines();
if (y < fl-1) y++;
ll = file.getLineLength(y);
if (x > ll) x = ll;
break;
}
repaint(); // Call update method
}
public void keyReleased(KeyEvent e)
{
// Called on key release including specials
}
public void keyTyped(KeyEvent e)
{
char c = e.getKeyChar(); // Append printing char
if (c >= ' ' && c <= '~')
{
file.insert(x, y, c);
x++;
}
if (c == (char) 127) // Delete char from file
{
if (x > 0)
{
file.delete(x-1, y);
x--;
}
}
repaint(); // Redraw screen
}
}
public void update(Graphics g) // Called by repaint
{ //
drawPicture((Graphics2D) g); // Draw Picture
}
public void paint(Graphics g) // When 'Window' is first
{ // shown or damaged
drawPicture((Graphics2D) g); // Draw Picture
}
private Dimension theAD; // Alternate Dimension
private BufferedImage theAI; // Alternate Image
private Graphics2D theAG; // Alternate Graphics
public void drawPicture(Graphics2D g) // Double buffer
{ // allow re-size
Dimension d = getSize(); // Size of image
if ( (theAG == null) ||
(d.width != theAD.width) ||
(d.height != theAD.height))
{ // New size
theAD = d;
theAI = (BufferedImage) createImage(d.width, d.height);
theAG = theAI.createGraphics();
if (true)
{
AffineTransform at = new AffineTransform();
at.setToIdentity();
at.scale(((double)d.width)/W, ((double)d.height)/H);
theAG.transform(at);
}
}
drawActualPicture(theAG); // Draw Picture
g.drawImage(theAI, 0, 0, this); // Display on screen
}
public void drawActualPicture(Graphics2D g) // Draw text
{
int WA= 20; // Offset Width
int HA= 40; // Offset Height for drawing text
Font font = new Font("Monospaced",Font.PLAIN,14);
g.setFont(font);
FontMetrics fm = g.getFontMetrics();
int WF = fm.charWidth('.'); // Width pixels
int HF = fm.getHeight(); // Height pixels
// Clear drawing area
g.setPaint(Color.white); // Paint Colour
g.fill(new Rectangle2D.Double(0, 0, W, H));
// Display text of file in black
g.setPaint(Color.black);
for (int i=0; i<file.getNoLines(); i++)
{
g.drawString(file.getLine(i), WA, i*HF + HA);
}
// Draw cursor current position
g.setPaint(Color.red);
g.drawLine(WA + x*WF, HA + y*HF, WA + (x)*WF, HA + (y-1)*HF);
}
}
最初に既存のエディタを使用したことはありますか? http://stackoverflow.com/questions/853071/wysiwyg-text-editor-in-java – alexg
テキストエディタは太字と下線を使用しません。私はあなたがワードプロセッサを開発していると思います。 – PauliL