用Java创建图例

时间:2018-04-14 16:31:13

标签: java swing

See the white space in the border

我正在尝试对我的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;
   }
}

1 个答案:

答案 0 :(得分:2)

您可以使用布局组合执行此类操作。例如,如果您想要输入单列数据,那么整体布局可以是GridLayout(0, 1),从而创建一列和可变行数的网格。然后行本身将由一个使用GridBagLayout的JPanel组成。像这样:

enter image description here

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());
    }
}