我正在尝试对我的java应用程序进行设计,我想制作2组我已经使用JPanel创建了2组,但我正在尝试制作一个图例设计类型。现在我的问题是有没有办法让JPanel的溢出可见?
看一下jpanel边框的空白区域,那里有一个jlabel,但它的内容超出了我想要显示的面板的范围。
这是我的代码:
package myproject;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GUI extends JFrame {
private static final long serialVersionUID = 1L;
private JLabel jlabel1, jlabel2, lbtitle1, lbtitle2;
private JTextArea lbresult;
private JPanel layout, group1, group2;
private JButton btnlogin;
private JTextField jtxemail, jtxpass;
public GUI() {
// TODO Auto-generated constructor stub
super("This is my interface");
setSize(500,420);
setLayout(new BorderLayout(0, 0));
doDrawing();
add(layout, BorderLayout.CENTER);
}
private void doDrawing() {
// TODO Auto-generated method stub
layout = new JPanel();
layout.setLayout(null);
layout.setBackground(Color.WHITE);
layout.setSize(this.getWidth(), this.getHeight());
group1 = createGroup(group1, 0, 15, layout.getWidth() * 50/100, 50);
lbtitle1 = new JLabel("Email");
lbtitle1.setBounds(10, -15, 100, 30);
lbtitle1.setOpaque(true);
lbtitle1.setBackground(Color.WHITE);
//create label1:
jlabel1 = new JLabel("Email: ");
jlabel1.setBounds(10, 10, 100, 30);
//create textfield1:
jtxemail = new JTextField();
jtxemail.setBounds(120, 10, 100, 30);
//add objects for the group:
group1.add(lbtitle1);
group1.add(jlabel1);
group1.add(jtxemail);
layout.add(group1);
}
private JPanel createGroup(JPanel group, int x, int y, int width, int height) {
group = new JPanel();
group.setLayout(null);
group.setBounds(x, y, 0, 0);
group.setSize(width, height);
group.setBackground(new Color(0,0,0,0));
group.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1, false));
return group;
}
}
答案 0 :(得分:2)
您可以使用布局组合执行此类操作。例如,如果您想要输入单列数据,那么整体布局可以是GridLayout(0, 1)
,从而创建一列和可变行数的网格。然后行本身将由一个使用GridBagLayout的JPanel组成。像这样:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
public class GUI2 extends JPanel {
private static final String[][] LABELS = {
{"E-Mail", "E-Mail Address"},
{"Phone", "Phone Number"},
{"Address", "Street Address"},
{"City", "City"},
{"State", "State"} };
private static final int TXT_FIELD_COLS = 15;
private Map<String, JTextField> labelFieldMap = new HashMap<>();
public GUI2() {
setLayout(new GridLayout(0, 1));
for (String[] label : LABELS) {
add(createLegend(label));
}
}
private JPanel createLegend(String[] label) {
JLabel jLabel = new JLabel(label[1]);
JTextField txtField = new JTextField(TXT_FIELD_COLS);
labelFieldMap.put(label[0], txtField);
JPanel legendPanel = new JPanel();
legendPanel.setBorder(BorderFactory.createTitledBorder(label[0]));
legendPanel.setLayout(new GridBagLayout());
int anchor = GridBagConstraints.WEST;
int fill = GridBagConstraints.HORIZONTAL;
int ins = 3;
Insets insets = new Insets(ins, ins, ins, 3* ins);
GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, anchor, fill, insets, 0, 0);
legendPanel.add(jLabel, gbc);
gbc.gridx = 1;
gbc.weightx = 0.0;
gbc.anchor = GridBagConstraints.EAST;
legendPanel.add(txtField, gbc);
return legendPanel;
}
private static void createAndShowGui() {
GUI2 mainPanel = new GUI2();
JFrame frame = new JFrame("GUI2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}