【问题标题】:how to remove space between jtextfield, jbutton and raisedbevel border如何删除jtextfield,jbutton和raisedbevel边框之间的空间
【发布时间】:2016-01-16 02:42:16
【问题描述】:

我想删除 JButtonJTextfield 之间的空白或边框空间添加到 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】:

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

    如果您想继续使用FlowLayout,您可以使用类似...的方式指定您想要的填充。

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

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

    我也不鼓励您一般使用 setPreferredSize 并依赖 Border 和布局来影响组件如何“额外”超出其默认首选大小

    看看Laying Out Components Within a ContainerHow to Use FlowLayoutHow to Use GridBagLayoutShould I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2020-02-09
      • 2015-08-24
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多