Вопрос настройки JButton - PullRequest
       31

Вопрос настройки JButton

1 голос
/ 05 августа 2011

Мне нужна помощь с настройкой JButton.

Для этого я использую расширенный метод ... Мне нужно добавить цвет фона для кнопки, а также мне нужно разместить два разных текста в двух местахв кнопке (вверху слева и по центру)

Мой код не поддерживает оба сценария (цвет и положение текста).Либо я могу разместить текст, либо я могу получить цвет BG.В текущем коде я получаю цвет BG, но текст не отображается

protected void paintComponent(Graphics g) {
        g.setColor( color);
        g.fillRect(0, 0, getSize().width, getSize().height);
        super.paintComponent(g);
        setPreferredSize(new Dimension(47, 33));

        if (isHeader) {
            g.setFont(new Font("Arial", Font.PLAIN, 11));
            g.drawChars(date.toCharArray(), 0, date.length(), 13, 20);
            //setBackground(color);

        } else {
            g.setFont(new Font("Arial", Font.PLAIN, 9));
            g.drawChars(date.toCharArray(), 0, date.length(), 3, 11);

            g.setFont(new Font("Arial", Font.PLAIN, 11));
            g.drawChars(hours.toCharArray(), 0, hours.length(), 18, 20);

        }
        super.paintComponent(g);
        setContentAreaFilled(false);
        g.finalize();
    }

1 Ответ

1 голос
/ 05 августа 2011

На первый взгляд кажется, что вы рисуете текст, но вы рисуете его в том же цвете, что и фон, поэтому вы не сможете его увидеть.Черный текст на черном фоне просто черный.

Вам нужен другой цвет для текста и фона.Что-то вроде:

protected void paintComponent(Graphics g) {
    g.setColor(backgroundColor);
    g.fillRect(0, 0, getSize().width, getSize().height);
    super.paintComponent(g);
    setPreferredSize(new Dimension(47, 33));

    g.setColor(textColor); //set the text color before drawing the text
    if (isHeader) {
        g.setFont(new Font("Arial", Font.PLAIN, 11));
        g.drawChars(date.toCharArray(), 0, date.length(), 13, 20);
    } else {
        g.setFont(new Font("Arial", Font.PLAIN, 9));
        g.drawChars(date.toCharArray(), 0, date.length(), 3, 11);

        g.setFont(new Font("Arial", Font.PLAIN, 11));
        g.drawChars(hours.toCharArray(), 0, hours.length(), 18, 20);
    }
    super.paintComponent(g);
    setContentAreaFilled(false);
    g.finalize();
}

Это, кажется, пара других забав в вашем коде.Почему вы не используете setBackground() и почему вы вызываете super.paintComponent() дважды?

Редактировать: Кроме того, почему вы устанавливаете размер компонента в методе рисования?Это кажется неправильным.И почему вы звоните finalize() на Graphics объекте?

...