0 / 0 / 0
Регистрация: 21.09.2018
Сообщений: 16

Изменение внешнего вида JButton

27.09.2018, 14:34. Показов 4065. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, вопрос. Как сделать скруглённые края у кнопок, (чтобы кнопки были похожи на кнопки а не на белые прямоугольники с текстом) и оставить текущее расстояние между ними. Знаю, что можно изменить метод setBorder(), но тогда кнопки прилипнут друг к другу, или сильно сожмутся по высоте.
Java
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
 
public class GUIFishing extends JFrame implements ActionListener {
    JButton button;
    JButton button2;
    JButton button3;
    JButton button4;
    Gui gui = new Gui();
 
    public static void main(String[] args) throws IOException { //эта функция может быть и в другом классе
        GUIFishing app = new GUIFishing(); //Создаем экземпляр нашего приложения
        app.go();
    }
 
    public void go() throws IOException {
        JFrame frame = new JFrame( );
        JPanel panel = new JPanel();
        Color color = new Color(137, 192, 196);
 
        JPanel buttonPanel = new JPanel(new GridLayout(4, 2));
 
        JPanel east = new JPanel(new GridBagLayout());
        east.setBackground(color);
        GridBagConstraints gbc = new GridBagConstraints();
 
 
        panel.setBackground(color);
 
 
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        east.setLayout(new BoxLayout(east, BoxLayout.Y_AXIS));
 
        JLabel label = new JLabel();
        label.setLayout(new BoxLayout(label, BoxLayout.Y_AXIS));
        label.setPreferredSize(new Dimension(50, 50));
        label.add(gui);
 
        button = new JButton("Вход");
        button.setBorder(BorderFactory.createMatteBorder(
                20, 6, 20, 6, color));
 
        button.setPreferredSize(new Dimension(110, 190));
 
        button2 = new JButton("Сохранить");
        button2.setBorder(BorderFactory.createMatteBorder(
                20, 6, 20, 6, color));
 
 
        button2.setPreferredSize(new Dimension(110, 190));
 
        button3 = new JButton("Загрузить");
        button3.setBorder(BorderFactory.createMatteBorder(
                20, 6, 20, 6, color));
 
 
        button3.setPreferredSize(new Dimension(110, 190));
 
 
        button4 = new JButton("Выход");
        button4.setBorder(BorderFactory.createMatteBorder(
                20, 6, 20, 6, color));
 
 
        button4.setPreferredSize(new Dimension(110, 190));
 
 
        gbc.anchor = GridBagConstraints.EAST;
        gbc.weighty = 1;
 
        button.addActionListener(this);
        buttonPanel.add(button);
        buttonPanel.add(button2);
        buttonPanel.add(button3);
        buttonPanel.add(button4);
 
        east.add(buttonPanel, gbc);
 
 
        frame.setBounds(600, 300, 600, 350);//Если не выставить  размер и положение то окно будет мелкое и незаметное
        frame.add(east, BorderLayout.EAST);
        frame.add(label);
 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //это нужно для того чтобы при закрытии окна закрывалась и программа
        frame.setVisible(true); //С этого момента приложение запущено!
 
    }
 
    public void actionPerformed(ActionEvent event) {
        button.setText("Вошли");
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2018, 14:34
Ответы с готовыми решениями:

Изменение внешнего вида Combobox
Добрый день! Обратите мое внимание, пожалуйста, в нужную сторону. Во вложениях слева стандартный комбобокс эклипса (голубоватый, синий...

Можно ли сделать кнопку JButton такого вида?
Можно ли сделать в GUI так как на картинке тоесть обычную кнопку сдлелать как 2 кнопка на картинке

Изменение прозрачности JButton
Доброго времени суток, уважаемые форумчане. У меня есть кнопка, которая меняет цвет текста, если на нее навести мышку. Проблема в том, что...

6
 Аватар для snajper_ro
116 / 101 / 52
Регистрация: 14.09.2011
Сообщений: 696
Записей в блоге: 1
28.09.2018, 07:33
не так просто, но
1)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int ARC_SIZE = 10;
@Override
    protected void paintComponent(Graphics g0) {
        int x = 0;
        Graphics2D g = (Graphics2D) g0;
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
        g.setColor(getBackground());
        g.fillRoundRect(x, x, getWidth(), getHeight(), ARC_SIZE, ARC_SIZE);
 
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
        g0.setColor(TEXT_COLOR);
        paintText(g0, this, getVisibleRect(), getText());
    }
Java
1
2
3
4
5
6
7
8
9
10
11
  protected void paintText(Graphics g, JComponent c, java.awt.Rectangle textRect, String text) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setFont(getFont());
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        FontMetrics fm = g2d.getFontMetrics();
        Rectangle2D r = fm.getStringBounds(text, g2d);
        int x = (this.getWidth() - (int) r.getWidth()) / 2;
        int y = (this.getHeight() - (int) r.getHeight()) / 2 + fm.getAscent();
        g2d.drawString(text, x, y);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
    }
0
0 / 0 / 0
Регистрация: 21.09.2018
Сообщений: 16
28.09.2018, 16:00  [ТС]
А что за параметр метода paintText() getText() ? Он не определяется...
0
 Аватар для snajper_ro
116 / 101 / 52
Регистрация: 14.09.2011
Сообщений: 696
Записей в блоге: 1
28.09.2018, 16:07
вы должны переопредилить эти методы в кнопке
new JButton().getText() , вот он(здесь находится)
0
0 / 0 / 0
Регистрация: 21.09.2018
Сообщений: 16
28.09.2018, 17:24  [ТС]
Если я вас правильно понял, я сделал таким образом все 4 кнопки и убрал установку границ :

Java
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
button = new JButton("Вход"){
 
            protected void paintText(Graphics g, JComponent c, java.awt.Rectangle textRect, String text) {
                Graphics2D g2d = (Graphics2D) g;
                g2d.setFont(getFont());
                g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
                FontMetrics fm = g2d.getFontMetrics();
                Rectangle2D r = fm.getStringBounds(text, g2d);
                int x = (this.getWidth() - (int) r.getWidth()) / 2;
                int y = (this.getHeight() - (int) r.getHeight()) / 2 + fm.getAscent();
                g2d.drawString(text, x, y);
                g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
            }
 
            int ARC_SIZE = 10;
            @Override
            protected void paintComponent(Graphics g0) {
                int x = 0;
                Graphics2D g = (Graphics2D) g0;
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
                g.setColor(getBackground());
                g.fillRoundRect(x, x, getWidth(), getHeight(), ARC_SIZE, ARC_SIZE);
 
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
                g0.setColor(Color.black);
                paintText(g0, this, getVisibleRect(), getText());
            }};
Получилось это...
Миниатюры
Изменение внешнего вида JButton  
0
 Аватар для snajper_ro
116 / 101 / 52
Регистрация: 14.09.2011
Сообщений: 696
Записей в блоге: 1
28.09.2018, 17:48
Java
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
42
43
44
45
46
47
48
49
50
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.util.Random;
 
public class Test {
 
 
    public static void main(String[] args) {
        JFrame f = new JFrame();
        JPanel p = new JPanel();
        f.add(p);
        JButton button = new JButton("Вход"){
 
            protected void paintText(Graphics g, JComponent c, java.awt.Rectangle textRect, String text) {
                Graphics2D g2d = (Graphics2D) g;
                g2d.setFont(getFont());
                g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
                FontMetrics fm = g2d.getFontMetrics();
                Rectangle2D r = fm.getStringBounds(text, g2d);
                int x = (this.getWidth() - (int) r.getWidth()) / 2;
                int y = (this.getHeight() - (int) r.getHeight()) / 2 + fm.getAscent();
                g2d.drawString(text, x, y);
                g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
            }
 
            int ARC_SIZE = 10;
            @Override
            protected void paintComponent(Graphics g0) {
                int x = 0;
                Graphics2D g = (Graphics2D) g0;
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
                g.setColor(Color.red);
                g.fillRoundRect(x, x, getWidth(), getHeight(), ARC_SIZE, ARC_SIZE);
 
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
                g0.setColor(Color.black);
                paintText(g0, this, getVisibleRect(), getText());
            }};
        button.setBorderPainted(false);
        button.setOpaque(false);
        p.add(button);
        f.setSize(300,200);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
    }
 
}
вот вам пример такой
0
0 / 0 / 0
Регистрация: 21.09.2018
Сообщений: 16
30.09.2018, 10:05  [ТС]
Не совсем то, что мне нужно, но спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2018, 10:05
Помогаю со студенческими работами здесь

Как запретить изменение размера JButton?
Как запретить изменение размера JButton при выводе на нее символов? Вот такая дичь получается, если на нажатие поставить вывод буквы...

JButton, отключить изменение цвета при нажатии
Как сделать, чтобы при нажатии на кнопку - не менялся её цвет. setFocusPainted() не помогает p.s. Не судите строго - я новичок)

Изменение внешнего вида приложения пользователем используя css JavaFx
Возможно ли использование данной операции для изменения цветов меню из класса controller (для кнопки) или к цветовой схеме главной сцены в...

Изменение внешнего вида кнопки
Есть созданная компонента - кнопка. Как задать цвет и форму? public partial class ValueButton : Button { ...

Изменение внешнего вида элементов
Здравствуйте! Прошу помощи программистов! Я-самоучка, делаю потихоньку сайтик по монтажу натяжных потолков по шаблону. Необходимо сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru