2015-06-25 2 views
0

У меня возникла проблема с правильной работой этого кода. Он компилируется, и изначально кадр отображается правильно. Проблема в том, что когда я вручную изменяю размер кадра путем максимизации или путем перетаскивания стороны кадра, текст исчезает. Я использую jGRASP, не уверен, что это проблема или нет. Мне кажется, этот код имеет смысл, и, как я уже сказал, он компилируется (я знаю, что это не обязательно правильно). Я все еще новичок в этом, поэтому, если кто-нибудь может указать мне в правильном направлении, я был бы очень благодарен.JAVA, отображение фраз при увеличении размеров шрифта в кадре

import javax.swing.*; 
import java.awt.*; 

public class JFontSizes extends JFrame { 
    int x = 5; 
    int y = 50; 
    String homework = "This is the first homework assignment"; 
    public JFontSizes() { 
     super("Increasing Font Sizes"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    } 
    public void paint(Graphics brush) { 
     super.paint(brush); 
     // This works sometimes. I am not sure if it is a jGRASP issue or something else. 
     // If I resize the frame, the text disappears, and I cannot get the text to start at the top of the frame 
     for(int n = 6; n<= 20; ++n) { 
     brush.setFont(new Font("Serif", Font.PLAIN, n)); 
     brush.drawString(homework, x, y); 
     y += 15; 
     } 
    }    
    public static void main(String[] args) { 
     JFontSizes frame = new JFontSizes(); 
     frame.setSize(400, 500); 
     frame.setVisible(true);  
    } 
} 
+0

Как правило, не рекомендуется рисовать непосредственно на рамке, вместо этого использовать «JPanel» и использовать его для выполнения вашей пользовательской графики путем переопределения метода 'paintComponent', см. [Выполнение пользовательской живописи] (http://docs.oracle) .com/javase/tutorial/uiswing/painting /) для получения более подробной информации – MadProgrammer

ответ

1

Когда первый раз paint() называется значением y, равным 5. И он увеличивается в цикле. Так что, прежде чем покинуть краску() его значение будет 275.

Но когда вы изменить размер кадра краски() вызывается снова и на этот раз значение у 275 и когда brush.drawString(homework, x, y); называется homework печатается на 275px внизу из левого верхнего угла.

Так что вам нужно сделать, это повторно инициализировать Y каждый раз:

public void paint(Graphics brush) { 
    y = 50; 
    .... 

Edit:
Как прокомментировал camickr вы должны переопределить paintComponent(...) вместо paint(...) до тех пор, пока есть конкретные причины для переопределения покрасить().
И вы имеете в виду, что вы не можете печатать текст сверху (даже в начале), то это потому, что вы инициализировали y с 50. Это означает, что текст будет нарисован на 50 пикселей сверху.

+1

Ответы, почему картина исчезает (+1). Однако рисование выполняется путем переопределения метода paintComponent() 'JPanel, а затем вы добавляете панель в фрейм. 'Я не могу заставить текст начинать в верхней части фрейма. Вы говорите ему, чтобы он начинался с 50. Вы должны начать с 0. Затем вы должны использовать метод Graphics.getFontMetrics(). Класс 'FontMetrics' даст максимальную высоту шрифта. Затем, прежде чем рисовать строку, вы добавляете это значение в значение y. Теперь все шрифты будут равномерно раскрашены на панели. – camickr

Смежные вопросы