У меня есть JButton, в котором я переопределил функцию PaintComponent(Graphics)с помощью дочерней JLabel (я понимаю, что это звучит глупо, обещаю, что это не так)
У меня есть mouseEntered(MouseEvent ) и mouseExited(MouseEvent) функции, которые изменяют видимость метки, а также устанавливают логическое значение, указывающее PaintComponent рисовать полупрозрачное наложение над кнопкой
Ожидаемое поведение заключается в том, что JLabel рисуется поверх наложения кнопки. Без наложения (переопределения PaintComponent) это работает отлично.
(Я предполагаю, что это не ограничивается только кнопками, хотя я не проверял эту теорию)
Класс кнопки:
У меня есть JButton, в котором я переопределил функцию PaintComponent(Graphics)[b]с помощью дочерней JLabel (я понимаю, что это звучит глупо, обещаю, что это не так) У меня есть mouseEntered(MouseEvent ) и mouseExited(MouseEvent) функции, которые изменяют видимость метки, а также устанавливают логическое значение, указывающее PaintComponent рисовать полупрозрачное наложение над кнопкой Ожидаемое поведение заключается в том, что JLabel рисуется поверх наложения кнопки. Без наложения (переопределения PaintComponent) это работает отлично. (Я предполагаю, что это не ограничивается только кнопками, хотя я не проверял эту теорию) Класс кнопки: [code]import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;
public class HoverButton extends JButton {
private final JLabel label; private final String title;
private boolean entered = false;
public HoverButton(String title) { label = new JLabel(title); this.title = title; int startChar = title.indexOf(']') + 1; String regex = new StringBuilder("\\[[a-zA-Z0-9]+\\]").append("| \\[[A-Za-z0-9]+ [A-Za-z0-9]+\\]") .append("| \\(decen\\)").append("| \\(eng, decen\\)").append("| \\(eng\\)") .append("|\\{.+\\}").toString(); String text = String.format(" %s[/b] ", title.substring(startChar).replaceAll(regex, "").trim()); label.setVisible(false); add(label); addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { super.mouseEntered(e); entered = true; label.setVisible(true); }
@Override public void paintComponent(Graphics g) { super.paintComponent(g); if (g instanceof Graphics2D g2d) { getIcon().paintIcon(this, g, getInsets().left, getInsets().top); int xMax = getWidth() - getInsets().right - getInsets().left; int yMax = getHeight() - getInsets().top - getInsets().bottom; if (entered) { g2d.setColor(new Color(0x88000000, true)); g2d.fillRect(getInsets().left, getInsets().top, xMax, yMax); } g2d.dispose(); } }
@Override public void setPreferredSize(Dimension d) { super.setPreferredSize(new Dimension((int) (d.getWidth() + getInsets().right + getInsets().left), (int) (d.getHeight() + getInsets().top + getInsets().bottom))); label.setMinimumSize(d); } } [/code] setPreferredSize(Dimension) внизу предназначен только для того, чтобы метка не изменяла размер кнопки
У меня есть JButton, в котором я переопределил функцию PaintComponent(Graphics) с помощью дочерней JLabel (я понимаю, что это звучит глупо, обещаю, что это не так)
У меня есть mouseEntered(MouseEvent ) и mouseExited(MouseEvent) функции, которые...
Я наткнулся на этот интересный факт, в то время как мне нужно было найти, является ли текущий кадр/окно наиболее верхним или нет. Я понял, что window.top! == Window сделает трюк. Однако после игры с ним еще несколько минут стало очевидным, что...
У меня возникла неприятная проблема, когда я заполняю детализированный выбор из двух selectOneMenu. Первое меню — это Сектор , которое управляет вторым Категорией . Я загружаю выделение для Категории в зависимости от Сектора, и все это работает...
У меня есть класс, который представляет собой собственный компонент Swing, расширяющий JComponent. Я пытаюсь сделать так, чтобы подкомпоненты этого пользовательского компонента можно было перемещать по фокусу, просто нажав TAB или SHIFT+TAB. Вместо...