Из моего учебника: «Напишите приложение, которое расширяет JFrame и отображает фразу вверх ногами, когда пользователь нажимает кнопку. Фраза отображается нормально, когда пользователь снова нажимает кнопку».
В настоящее время у меня есть строка, которая рисуется с использованием метода paint() и графического объекта. Строка видна в кадре JUpsideDown, она перевернута и расположена примерно посередине панели. Я добавил свою кнопку и actionListener, но я думаю, что код в моем методе actionPerformed неверен, потому что я пытаюсь сделать отрицательный размер шрифта положительным, умножив его на -1, но, похоже, это не действует, когда я перекрашиваю . Позиционированная строка перемещается в положение x = 100 и y = 100, но строка по-прежнему перевернута.
Любое руководство приветствуется.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class JUpsideDown extends JFrame implements ActionListener
{
int x = 350;
int y = 100;
int fontSize = -26;
Font font = new Font("Serif", Font.PLAIN, fontSize);
JButton press = new JButton("Flip Text");
String label = "Look at this text, it will flip!";
public JUpsideDown()
{
setTitle("JUpsideDown");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(press);
press.addActionListener(this);
}
public void paint(Graphics g)
{
super.paint(g);
g.setFont(font);
g.drawString(label, x, y);
}
public void actionPerformed(ActionEvent e)
{
fontSize = fontSize * -1;
x = 100;
y = 100;
repaint();
}
public static void main(String[] args)
{
JUpsideDown frame = new JUpsideDown();
frame.setSize(450, 200);
frame.setVisible(true);
}
}
Graphics
через отрицательное состояние, что также потребует дополнительного смещения для компенсации. Как правило, вы не хотите переопределятьpaint
контейнера верхнего уровня, такого какJFrame
, это может вызвать бесконечные проблемы, вместо этого вы должны начать сJPanel
и вместо этого переопределить его методpaintComponent
- person MadProgrammer   schedule 20.11.2017Graphics
- person MadProgrammer   schedule 20.11.2017Graphics
вокруг центра текста вместо этого. - person MadProgrammer   schedule 20.11.2017Graphics
вокруг центра текста, но это я - person MadProgrammer   schedule 20.11.2017repaint
- ключевая проблема, с которой вы столкнулись сейчас, заключается в том, что вы на самом деле не обновляете состояниеfont
, вы просто меняете некоторую переменную состояния. - person MadProgrammer   schedule 20.11.2017