您好我正在尝试制作java桌面应用程序,我正在使用多个jlabel我希望在每个标签之间留出小空格
我怎样才能实现这个目标
这是我的代码
public class Second extends javax.swing.JFrame {
JLabel label=new JLabel();
/**
* Creates new form Second
*/
public Second() {
this.getContentPane().setBackground(new java.awt.Color(255, 140, 0));
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setUndecorated(true);
JButton print= new JButton();
print.setBackground(new java.awt.Color(153, 153, 0));
print.setOpaque(true);
print.setBounds(525,1282,130,85);
print.setFont(new java.awt.Font("Times New Roman", 1, 24)); // NOI18N
print.setForeground(new java.awt.Color(255,255,255));
print.setText("Print");
this.add(print);
JButton home= new JButton();
home.setBackground(new java.awt.Color(153, 153, 0));
home.setOpaque(true);
home.setBounds(640,1282,130,85);
home.setFont(new java.awt.Font("Times New Roman", 1, 24)); // NOI18N
home.setForeground(new java.awt.Color(255, 255,255 ));
home.setText("Home");
this.add(home);
int Height = 134;
int a=100;
ArrayList<JLabel> label = new ArrayList<JLabel>();
for(int i=0;i<23;i++){
JLabel j = new JLabel();
j.setBackground(new java.awt.Color(255, 140, 255));
j.setOpaque(true);
j.setBounds(5,Height,378,50);
j.setFont(new java.awt.Font("Times New Roman", 1, 16)); // NOI18N
j.setForeground(new java.awt.Color(128, 128, 128));
j.setText("Case Item CourtNo ");
LineBorder line = new LineBorder(Color.blue, 2, true);
j.setBorder(line);
this.add(j);
label.add(j);
JLabel j1 = new JLabel();
j1.setBackground(new java.awt.Color(255, 140, 0));
j1.setOpaque(true);
j1.setBounds(390,Height,768,50);
j1.setFont(new java.awt.Font("Times New Roman", 1, 16)); // NOI18N
j1.setForeground(new java.awt.Color(128, 128, 128));
j1.setText("Case Item CourtNo ");
this.add(j1);
label.add(j1);
Height = Height +50;
a=a+10;
}
initComponents();
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g3 = (Graphics2D) g;
BasicStroke bs = new BasicStroke(2);
Line2D lin1 = new Line2D.Float(386, 100, 386, 1282);
Line2D lin = new Line2D.Float(0, 1283, 768, 1283);
Line2D line3=new Line2D.Float(400,1284,400,1364);
g3.setStroke(bs);
g3.setColor(Color.white);
g3.draw(lin1);
g3.draw(lin);
g3.draw(line3);;
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Second().setVisible(true);
}
});
}}
我的新代码
public class Testing1 extends javax.swing.JFrame {
public Testing1() {
JFrame frame = new JFrame();
JPanel panel = createPanel();
panel.setLocation(100, 100);
//panel.setLayout(null);
this.add(panel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
initComponents();
}
private JPanel createPanel() {
jPanel1 = new JPanel(new GridLayout(0, 1, 10, 5));
EmptyBorder panelBorder = new EmptyBorder(10, 10, 10, 10);
jPanel1.setBorder(panelBorder);
EmptyBorder border = new EmptyBorder(5, 20, 5, 20);
LineBorder line = new LineBorder(Color.blue, 2, true);
CompoundBorder compound = new CompoundBorder(line, border);
for (int i = 0; i <12; i++) {
JLabel label = new JLabel("Label" + i);
label.setBorder(compound);
// label.setBounds(13, 100, 100, 50);
jPanel1.add(label);
}
return jPanel1;
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBackground(new java.awt.Color(204, 0, 153));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 306, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 243, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 94, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(46, 46, 46)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Testing1().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
更新 提前致谢
答案 0 :(得分:4)
“如何在jlabel之间留出空格?”
setBounds and null layouts
:否; 使用EmptyBorders
:是!使用LayoutManagers
:是!
“我怎么能用这个可以解释一下”
使用可以使用包含JPanel
的默认FlowLayout
(或者在这种情况下设置FlowLayout的间隙)
FlowLayout 构造函数:
public FlowLayout(int align,
int hgap,
int vgap)
对齐 - 对齐值
hgap - 组件之间以及组件与Container边框之间的水平间隙
vgap - 组件之间以及组件与Container边框之间的垂直间隙
实施例
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 5);
for (int i = 0; i < 10; i++) {
panel.add(new JLabel("Label" + i));
}
您可以使用EmptyBorder
EmptyBorder 构造函数
public EmptyBorder(int top,
int left,
int bottom,
int right)
top - 边框的顶部插图
left - 边框的左边插页
bottom - 边框的底部插图
右边 - 边框的右边插图
实施例
JPanel panel = new JPanel();
for (int i = 0; i < 10; i++) {
JLabel label = new JLabel("Label" + i);
EmptyBorder border = new EmptyBorder(5, 20, 5, 20);
label.setBorder(border);
panel.add(label);
}
如果您想使用LineBorder
和 EmptyBorder
作为保证金,可以使用CompoundBorder
复合Border类,用于通过将内部Border对象嵌套在外部Border对象的insets中,将两个Border对象组合成单个边框。例如,此类可用于向具有现有装饰边框的组件添加空白边距空间:
CompoundBorder 示例
JPanel panel = new JPanel();
EmptyBorder border = new EmptyBorder(5, 20, 5, 20);
LineBorder line = new LineBorder(Color.blue, 2, true);
CompoundBorder compound = new CompoundBorder(line, border);
for (int i = 0; i < 10; i++) {
JLabel label = new JLabel("Label" + i);
label.setBorder(compound);
panel.add(label);
}
有很多种可能性。选择你的味道。总的来说,它没有不尝试设置大小和位置,并使用布局管理器和边框和间隙来调整大小,间距等。
了解如何使用Laying out Components Within a Container
处的不同布局管理器使用 CompoundBorder 和 GridLayout(int rows,int cols,int hgap,int vgap)的完整示例
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
public class CompoundBorderDemo {
public CompoundBorderDemo() {
JFrame frame = new JFrame();
JPanel panel = createPanel();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private JPanel createPanel() {
JPanel panel = new JPanel(new GridLayout(5, 5, 10, 10));
EmptyBorder panelBorder = new EmptyBorder(10, 10, 10, 10);
panel.setBorder(panelBorder);
EmptyBorder border = new EmptyBorder(5, 20, 5, 20);
LineBorder line = new LineBorder(Color.blue, 2, true);
CompoundBorder compound = new CompoundBorder(line, border);
for (int i = 0; i < 25; i++) {
JLabel label = new JLabel("Label" + i);
label.setBorder(compound);
panel.add(label);
}
return panel;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new CompoundBorderDemo();
}
});
}
}
答案 1 :(得分:2)