嗨,我正在尝试使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
}
更新预先感谢
“如何在jlabel之间给空格?”
setBounds and null layouts
: 不; 使用EmptyBorders
:是的!使用LayoutManagers
:是的!
“我怎么用这个,你能解释一下吗”
使用可以使用默认FlowLayout
的包含JPanel
(或在这种情况下设置FlowLayout的间隙)
FlowLayout构造函数:
public FlowLayout(int align,
int hgap,
int vgap)
align-对齐值
hgap-组件之间以及组件与容器边界之间的水平间隙
vgap-组件之间以及组件与容器边界之间的垂直间隙
例子
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-边框的底部插图
right-边框的右插图
例子
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对象的插入物中来将两个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);
}
有很多可能性。选择你的口味。关键是不要尝试为所有内容设置大小和位置,并利用布局管理器以及边框和间隙来调整大小,间距等。
在布局容器中的组件时学习使用不同的布局管理器
使用CompoundBorder和GridLayout的完整示例(int行,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();
}
});
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句