2015-10-03 2 views
0

enter image description hereсвинг толще Линейная граница на одной стороне

Заметно толще на левой стороне. Использование матовой границы не создает этого. Я хочу знать, почему 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?

+0

Опубликовать [SSCCE] (HTTP (например, JavaFX не импортируя должным образом, если вы не делаете выше трюк, а.): // sscce. org /), которая демонстрирует эту проблему. Я никогда не видел эту проблему всякий раз, когда я использую LineBorder (просто проверяюсь и до сих пор не вижу проблемы). Таким образом, проблема может быть связана с другим кодом. Или это может быть проблема с версией/платформой. Таким образом, SSCCE должен быть только кадром и кнопкой, и мы должны иметь возможность компилировать и выполнять код. – camickr

+0

Готово. Должен быть весь соответствующий код. – TheFaster

+0

См. [Должен ли я избегать использования методов метода Set (Preferred | Maximum | Minimum) в Java Swing?] (Http://stackoverflow.com/q/7229226/418556) (Да.) –

ответ

0

На жаворонке решили удалить 1.8 из моего пути сборки, а затем снова добавить ту же библиотеку назад. Теперь кнопка отлично выглядит.

Это в Затмения Луны, которая, как известно, есть некоторые buildpath причуды

Смежные вопросы