Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 21.09.2018
Сообщений: 16

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

27.09.2018, 14:34. Показов 3977. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru