Итак, у меня есть JButton
, что, когда вы наводите на него курсор, появляется подчеркивание с использованием HTML. Однако, когда подчеркивание добавляется, он делает бит JButton
немного большим, чем предполагалось.Как остановить рост JButton после добавления подчеркивания?
Я попробовал несколько вещей, как
button.setMaximumSize(button.getPreferredSize());
перед добавлением подчеркивание, но я не смог это исправить. Итак, как я могу убедиться, что высота остается неизменной, независимо от того, присутствует ли подчеркивание или нет.
У меня есть образец класса ниже, который демонстрирует проблему (я не мог заставить его иметь одинаковую серьезность, но этого достаточно, чтобы показать проблему).
ОБРАЗЦА КЛАСС
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.metal.MetalButtonUI;
public class UnderlineSample extends JFrame {
public UnderlineSample() {
super("Underline Sample");
setLayout(new GridBagLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 150));
String text =
"<html>"
+ "<p style = 'border-bottom: 1px solid rgba(0,0,0,0,0); box-sizing: border-box;'>"
+ "<span style = 'color: rgb(0, 0, 255); font-weight: bold;'>"
+ "Sample"
+ "</span> "
+ " underline button"
+ "</p>"
+ "</html>";
JButton button = new JButton(text);
button.setFont(new Font("", Font.PLAIN, 18));
button.setFocusable(false);
button.setBackground(Color.LIGHT_GRAY);
button.setForeground(Color.BLACK);
button.setUI(new MetalButtonUI());
button.setHorizontalAlignment(SwingConstants.LEFT);
button.setAlignmentX(LEFT_ALIGNMENT);
button.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
String s =
"<html>"
+ "<p style = 'border-bottom: 1px solid black; box-sizing: border-box;'>"
+ "<span style = 'color: rgb(0, 0, 255); font-weight: bold;'>"
+ "Sample"
+ "</span> "
+ " underline button"
+ "</p>"
+ "</html>";
button.setText(s);
}
public void mouseExited(MouseEvent e) {
String s =
"<html>"
+ "<p style = 'border-bottom: 1px solid rgba(0,0,0,0,0); box-sizing: border-box;'>"
+ "<span style = 'color: rgb(0, 0, 255); font-weight: bold;'>"
+ "Sample"
+ "</span> "
+ " underline button"
+ "</p>"
+ "</html>";
button.setText(s);
}
});
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.ipady = 10;
gbc.insets = new Insets(0, 10, 5, 10);
add(button, gbc);
pack();
setVisible(true);
}
public static void main(String[] args) {
new UnderlineSample();
}
}
Спасибо, это сработало. У меня есть последний вопрос. При попытке этого я заметил, что пробелы между значениями rgb заставляют его не работать. Например, в то время как это сработало: 'rgb (4,137,181);', это не было: 'rgb (4, 137, 181);'. вы знаете, почему это так? – Ryan
Рад, что это сработало. «Я заметил, что пробелы между значениями rgb заставляют его не работать». Whitespace [технически разрешено] (https://www.w3.org/TR/css3-color/#rgb-color) - это демонстрация того, что Swing css/html parser далек от совершенства. – copeg
Хорошо, еще раз спасибо – Ryan