Компонент исчезнет при изменении размера? - PullRequest
0 голосов
/ 25 октября 2019

Привет, я новичок в Java, здесь у меня есть программа, однако, когда я пытаюсь изменить размер панели, мой текст просто исчезает? Кроме того, как я могу нарисовать толстую зеленую линию под моим текстом, которая останется под текстом даже при изменении размера, я очень невежественен?

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

public class Groovy
{

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame= new JFrame("Shearing Word Demo");

                frame.setResizable(true);
                frame.setSize(new Dimension(500,250));
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Toolkit it=Toolkit.getDefaultToolkit();
                Dimension d=it.getScreenSize();
                int w=frame.getWidth(), h=frame.getHeight();
                frame.setLocation(d.width/2-w/2, d.height/2-h/2);
                frame.add(new JComponent(){
                    @Override public void paintComponent(Graphics g){
                        Graphics2D g2=(Graphics2D) g;
                        g2.setColor(Color.magenta);
                        g2.setFont(new Font("Comic Sans MS",Font.BOLD,44));
                        g2.drawString("Feeling Groovy!", 110,125 );
                    }
                });
                frame.setVisible(true);
            }
        });
    }
}

1 Ответ

0 голосов
/ 26 октября 2019

как я могу нарисовать толстую зеленую линию под моим текстом, которая останется под текстом даже при изменении размера, я

Если вы делаете пользовательскую роспись, то основные шаги, которые вы должны выполнитьбудет что-то вроде:

  1. получить FontMetrics объекта Graphics с помощью метода getFonTMetrics ()
  2. получить прямоугольник текста с помощью метода getStringBounds (...)
  3. используйте метод setStroke (...) объекта Graphics2D для установки толщины линии для рисования
  4. используйте метод DrawLine (...) объекта Graphics2D для рисования линии на основе местоположениятекста и информации прямоугольника из границ строк

Более простое решение для отображения текста - использовать JLabel. Затем вы можете установить границу метки. Прочитайте раздел из учебника Swing по Как использовать границы для получения дополнительной информации.

Обратите внимание, что при выполнении пользовательского рисования с JComponent вы также несете ответственность за очистку фона компонента. Итак, первая картина в методе должна быть:

g2.setColor( getBackground() );
g2.fillRect(0, 0, getWidth(), getHeight());

Большинство людей используют JPanel для пользовательской живописи, тогда вы можете просто использовать:

super.paintComponent(g);

, чтобы убедиться, что фон очищен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...