свинг толще Линейная граница на одной стороне
Заметно толще на левой стороне. Использование матовой границы не создает этого. Я хочу знать, почему LineBorder создаст это, а не MatteBorder.
Это JButton, который помещается в JPanel, который затем добавляется в JFrame.
Соответствующий код:
package test;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class View extends JPanel{
public View(){
JPanel displayPanel = new JPanel();
displayPanel.setBackground(Color.WHITE);
displayPanel.setSize(500, 500);
JButton backspace = createButton("\u2190", "backspace", Color.RED, null, new Controller());
backspace.setOpaque(false);
backspace.setSize(25, 25);
backspace.setBorder(new LineBorder(Color.RED, 1));
backspace.setMinimumSize(new Dimension(25, 25));
backspace.setPreferredSize(new Dimension(25, 25));
displayPanel.add(backspace);
add(displayPanel);
}
private JButton createButton (String text, String ac, Color fg, Color bg, ActionListener handler){
JButton button = new JButton();
button.setText(text);
button.setForeground(fg);
button.setBackground(bg);
if (ac!= null){
button.setActionCommand(ac);
}
button.setFont(new Font(button.getFont().getName(), button.getFont().getStyle(), 20));
button.addActionListener(handler);
return button;
}
private class Controller implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String foo = e.getSource().toString();
System.out.println(foo);
//display.setText(button.getActionListeners().toString());
}
}
}
И главное:
package test;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Foo{
public static void main (String args[]){
final int height = 400;
final int width = 330;
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
EventQueue.invokeLater(new Runnable(){
@Override
public void run() {
JFrame frame = new JFrame();
frame.setSize(330, 400);
frame.setLocation((screen.width - width)/2, (screen.height - height)/2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setContentPane(new View());
frame.setVisible(true);
}
});
}
}
Если я его переключиться на
backspace.setBorder(new MatteBorder(1, 1, 1, 1, Color.RED));
Он показывает, как хотелось бы.
Что вызывает несоответствие толщины в LineBorder?
Опубликовать [SSCCE] (HTTP (например, JavaFX не импортируя должным образом, если вы не делаете выше трюк, а.): // sscce. org /), которая демонстрирует эту проблему. Я никогда не видел эту проблему всякий раз, когда я использую LineBorder (просто проверяюсь и до сих пор не вижу проблемы). Таким образом, проблема может быть связана с другим кодом. Или это может быть проблема с версией/платформой. Таким образом, SSCCE должен быть только кадром и кнопкой, и мы должны иметь возможность компилировать и выполнять код. – camickr
Готово. Должен быть весь соответствующий код. – TheFaster
См. [Должен ли я избегать использования методов метода Set (Preferred | Maximum | Minimum) в Java Swing?] (Http://stackoverflow.com/q/7229226/418556) (Да.) –