如何删除 jtextfield、jbutton 和 raisedbevel 边框之间的空格

问题描述 投票:0回答:1

我想删除

JButton
JTextfield
之间的空白或边框空间添加在
raisedbevel
边框内 我试过这段代码,但它们之间仍然存在差距

import java.awt.*; 
import javax.swing.*;
import javax.swing.border.Border;

public class Main {
  public static void main(String args[]) {
    JFrame f = new JFrame("JPasswordField  ");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel p=new JPanel(),pp=new JPanel();
    JButton b=new JButton("o");

b.setBorder(null);
b.setBorderPainted(false);
b.setMargin(new Insets(0,0,0,0));
 Border emptyBorder = BorderFactory.createEmptyBorder();
    b.setBorder(emptyBorder);
    Border  raisedbevel=BorderFactory.createRaisedBevelBorder();


    pp.setBorder(raisedbevel);
    JTextField t=new JTextField(20);
    t .setBorder(javax.swing.BorderFactory.createEmptyBorder());
    t.setPreferredSize(new Dimension(100, 25));
    b.setPreferredSize(new Dimension(25, 25));
    pp.setBackground(Color.black);
    pp.add(t);

     pp.add(b);


     p.add(pp);
    f.add(p);
    f.setSize(400, 100);
    f.setVisible(true);


  }
}

我想完全删除那个黑色空间 谢谢。

java swing jtextfield border-layout jpasswordfield
1个回答
1
投票

JPanel
默认使用
FlowLayout
,默认情况下使用
5
的填充,垂直和水平。

如果你想继续使用

FlowLayout
,你可以指定你想要的填充,比如...

pp = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0);

或使用其他布局管理器,例如

GridBagLayout
.

我也不鼓励您一般使用

setPreferredSize
并依赖
Border
和布局来影响组件的“额外”尺寸超出其默认首选尺寸的方式。

看看在容器内布置组件如何使用 FlowLayout如何使用 GridBagLayout我应该避免在 Java Swing 中使用 set(Preferred|Maximum|Minimum)Size 方法吗?

© www.soinside.com 2019 - 2024. All rights reserved.