Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
4 / 5 / 1
Регистрация: 25.05.2012
Сообщений: 262
Записей в блоге: 1

Сделал круглую кнопку - не пойму почему не работает

07.09.2016, 08:12. Показов 1030. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, друзья!
Мне нужен круг, который бы откликался на нажатие и наведение мышью. Решил, что логичнее переопределить JButton. Нарыл тут http://stackoverflow.com/quest... tton-round вот такой код:
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
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseListener;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JButton;
import com.sun.javafx.geom.Ellipse2D;
import com.sun.javafx.geom.Shape;
import java.awt.geom.Ellipse2D.Float;
 
 
public class RoundButton extends JButton { 
    public RoundButton(String label){
        super(label);
        Dimension size = getPreferredSize(); 
        
        JOptionPane.showMessageDialog(null, getPreferredSize());
        size.width = size.height = Math.min(size.width, size.height);
        setPreferredSize(size);
        setContentAreaFilled(false);
        
    }
    
    protected void paintComponent(Graphics g){
        if (getModel().isArmed()) {
            g.setColor(Color.RED);
        }else{
            g.setColor(getBackground());
        }
        g.fillOval(0,0,getSize().width-1,getSize().height-1);
        
        super.paintComponent(g);
    }
    
    protected void paintBorder(Graphics g){
        g.setColor(getForeground());
        g.drawOval(0, 0, getSize().width-1, getSize().height-1);
    }
    
    Shape shape;
    
    public boolean contains(int x, int y){
        if (shape == null || !shape.getBounds().equals(getBounds())){
        shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());
            }
        return shape.contains(x,y);
    }
 
// --------- вызов -----------
public class Go{
    
    Go(String titleOfFrame) throws IOException {
        JFrame frame = new JFrame(titleOfFrame);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLocation(400, 400);
        
        frame.add(oval);
        
        frame.setVisible(true);
        
        RoundButton roundButton = new RoundButton("Round Button");
        roundButton.setBackground(Color.green);
        roundButton.addMouseListener(new Listener());       
        
        frame.add(roundButton);
 
    }   
}
 
 
public class Main {
    public static void main(String[] args) {    
        
        
        SwingUtilities.invokeLater(new Runnable() { 
            
            public void run() {             
                try {
                    new Go("New Frame");
 
                } catch (IOException e) {
                     
                    e.printStackTrace();
                }
            }
        });
    }
}
Проблема 1:

Эклипс ругается на строчку
Java
1
shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());
Говорит, что Float'а нету. Как видно в начале кода, добавил все возможные пакеты, но всё равно ругается - не пойму почему, что еще ему надо?

Проблема 2:

Запускаю его у себя и вижу круглую кнопку на всё окно, которая масштабируется вместе с окном (но это ладно) и при наведении компилятор выдает кучу ошибок. Я подозреваю, что что-то не то с обработчиком событий, попытка добавить интерфейс MouseListener и прописать там действия при наведении не помогли.
Я не могу понять что именно я делаю неправильно.
Помогите кто чем может, пожалуйста. Я в тупике.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2016, 08:12
Ответы с готовыми решениями:

Не пойму почему не работает код?
Не пойму почему не работает код? package labor6.feladat1; import static labor6.feladat1.Labor6Feladat1.tomb; /** * @author...

php!? я сделал фильтр, глотающий теги, но не пойму почему он не может отфильтровать строку (см. внутри)?
$message=preg_replace('(<+?>)','|',$message); почему он не может отфильтровать вот это: <div style="background-color:#FC3;...

не пойму почему не работает
есть код str = "<карта><_2><_1><_0 x="1" y="2" z="3" /><_1 x="11" y="22" z="3" /></_1><_2><_0 x="1" y="2" z="3" /><_1 x="1"...

1
63 / 63 / 58
Регистрация: 19.01.2016
Сообщений: 152
07.09.2016, 12:18
В методе paintComponent установи размеры кнопки поменьше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2016, 12:18
Помогаю со студенческими работами здесь

Не пойму, почему не работает
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" ...

Не пойму почему не работает?
#include "stdafx.h" #include <conio.h> using namespace System; enum class Suit {Clubs, Diamonds, Hearts, Spades}; int...

Не пойму почему не работает
Не пойму почему не работает полностью игра я нашел исходник игры и коечто добавил переделал и теперь у меня на форме 2 человечек не...

Не пойму почему не работает move_uploaded_file()
Первые шаги в php.. Загружаю методом POST файл и хочу его сохранить в папку на сервере, новый файл перетирает предыдущий. Все время...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru