[解決済み] スイングラインボーダー片側太め
2022-02-15 02:17:40
質問
左側が顕著に太くなっています。Matte Borderを使ってもこのようにはなりません。私が知りたいのは、なぜ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の太さの不一致は何が原因なのでしょうか?
解決方法は?
思いつきで、ビルドパスから1.8を削除し、同じライブラリを再び追加することにしました。ボタンがうまく描画されるようになりました。
これはEclipse Lunaでの話ですが、Lunaはビルドパスの癖があることで知られています(例えば、上記のトリックを同様に行わないとJavaFXが正しくインポートされないなど)。)
関連
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み】javaで無効な文字定数
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
-
[解決済み] ArrayListの初期化を1行で行う。
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】StringUtils.isBlank() vs String.isEmpty()
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】intがnullであるかどうかを確認する方法
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み] Java Swingでset(Preferred|Maximum|Minimum)Sizeメソッドの使用は避けた方が良いのでしょうか?
-
[解決済み] Swing GUIにおけるホワイトスペースの提供