WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » 1. Как можно отобразить текст на экране ?

1. Как можно отобразить текст на экране ?


Дата публикации: 17-03-2013

Предложение от Nelson Yu.

Самый простой способ нарисовать строку - это нарисовать ее в paint(), т.е.

public void paint(Graphics g)
{
// This will draw the string in a red "TimesRoman" font
g.setColor(Color.red);
g.setFont(new Font("TimesRoman", Font.BOLD, 12));
// This draws the string given the x,y co-ordinates of the _baseline_
// Don't think the point you give it is the upper-left corner
g.drawString("Hi There", 10, 50)
}
Вы можете отменить расцветку в Панели, Фрейме, Диалоге, и т.д .. Я сказал бы подкласс Панель. Таким образом не смешивая окружение с подпрограммой расцветки Фрейма.

public class MyPanel extends Panel
{
...
...
public void paint(Graphics g)
...
}

Обратите внимание: "Графика" абстрактна, и таким образом вы не можете просто подтверждать. То есть,
Graphics g = new Graphics()
g.drawString(...);
является запрещенным в Java. Таким образом самый простой способ отыскивать графический образец - это paint(), update(), и т.д. Но если вы имеете любой образец графики, вам нужно нарисовать строку.

2. Как можно нарисовать линию ?

Предложени от Nelson Yu

drawLine(x1, y1, x2, y2) является методом в классе Graphics, так что вам будет нужен его образц. Вы не можете создавать его самостоятельно, так как он абстрактен. То есть.

// g - это образец графики
g.drawLine(10, 10, 100, 100);

// This is a nice little app I wrote for my "Introduction to the AWT"
// document. (A newbie guide before I overload them with information
// with my new (and IMPROVED) "AWT Tutorial").
// It draws 50 squares within each other


import java.awt.*;

public class FiftySquares extends Frame
{
float xA, yA, xB, yB, xC, yC, xD, yD,
xA1, yA1, xB1, yB1, xC1, yC1, xD1, yD1,p,q,r;
int i;
int x_center, y_center;

static final int H_SIZE = 300;
static final int V_SIZE = 300;

public FiftySquares()
{
q = (float)0.05;
p = 1 - q;
r = (float)0.95 * H_SIZE;

x_center = H_SIZE/2;
y_center = V_SIZE/2;

resize(H_SIZE, V_SIZE);
show();
}

public void paint(Graphics g)
{
xA = xD = x_center - r;
xB = xC = x_center + r;
yA = yB = y_center - r;
yC = yD = y_center + r;

for(i=0; i 0) ddx += 0.5; else ddx -= 0.5; // округление выключено
if (ddy > 0) ddy += 0.5; else ddy -= 0.5; // "
int dx = (int)ddx;
int dy = (int)ddy;

// Теперь мы можем вычислить угловые точки...

int xPoints[] = new int[4];
int yPoints[] = new int[4];

xPoints[0] = startX + dx;
yPoints[0] = startY + dy;

xPoints[1] = startX - dx;
yPoints[1] = startY - dy;

xPoints[2] = endX - dx;
yPoints[2] = endY - dy;

xPoints[3] = endX + dx;
yPoints[3] = endY + dy;

// Заполняем прямоугольник эффективно рисуюя толстую линию
g.fillPolygon(xPoints, yPoints, 4);
}


13. Дано экранное изображение. Как можно "скопировать" многоугольную область из одного места в окне апплета в другое ? Как нарисовать только один из A/R/G/B каналов изображения ? Как вращать изображения по различным направлениям с течением времени ?

Предложение от Dean Jones

Я сделал это используя PixelGrabber и MemoryImageSource. Представте изображение 50x50, которое поворачивается на 90 градусов:

Image img = createImage(...);

int buffer[] = new int[50 * 50];
int rotate[] = new int[50 * 50];

PixelGrabber grabber = new PixelGrabber(img, 0, 0, 50, 50, buffer, 0, 50);

try
{
grabber.grabPixels();
}
catch(InterruptedException e)
{
...
}

for(int y = 0; y < 50; y++)
{
for(int x = 0; x < 50; x++)
{
rotate[((50-x-1)*50)+y] = buffer[(y*50)+x];
}
}
Image rot = createImage(new MemoryImageSource(50, 50, rotate, 0, 50));


14. Как можно листать изображение поперек экрана без оставления следа или иметь возможность каждый раз перерисовывать задний фон (спрайтовая анимация) ? Как изменить размер GIF при использовании метода getImage, а затем drawImage ?

Предложение от M. K. Kwong

Одна форма drawImage метода позволяет вам определять ширину wd и высоту ht (в пикселах) изображения, которое будет нарисовано. Отображаемое изображение будет затем масштабироваться к этим параметрам. Пример:

Image img = getImage("picture.gif");
g.drawImage(img,0,0,wd,ht,this);
Где g - графика, обычно находящаяся в paint (Graphics g) методе.


15. Как получить размер текстовой строки, которая будет на экране ?

Предложение от M. K. Kwong

Чтобы получить ширину строки tx, используйте

int tw = g.getFontMetrics().stringWidth(tx);
Чтобы получить ее высоту используйте (обратите внимание, что вы не должны упоминать строку tx в это время):

int th = g.getFontMetrics().getHeight();
Обе команды должны использоваться внутри контекста Grahpics g, также как в paint(Graphics g). В качестве альтернативы, если вы знаете шрифт f, который используется для строки, вы можете использовать

int tw = getFontMetrics(f).stringWidth(tx);
не включая g.
Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Yoggi Berra:

"В теории, теория и практика неразделимы. На практике это не так."

Опрос

Ваша техника?

Настольный компютер
Ноутбук
Смартфон
iPad
iPhone
другое