Java GUI问题-布局行为怪异

Java GUI问题-布局行为怪异,java,swing,user-interface,checkbox,Java,Swing,User Interface,Checkbox,我有这个问题。当我试图在面板中更改GUI时,什么也没发生。它一直保持不变。如果你看一下我的“membersTable”鼠标侦听器,它应该会在右边添加一个面板,但是当我尝试使用GridBagLayout时,什么都没有发生,或者它会添加我想要的信息,但不会添加复选框。我做错了什么?我真的需要在继续之前解决这个问题 package gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension;

我有这个问题。当我试图在面板中更改GUI时,什么也没发生。它一直保持不变。如果你看一下我的“membersTable”鼠标侦听器,它应该会在右边添加一个面板,但是当我尝试使用GridBagLayout时,什么都没有发生,或者它会添加我想要的信息,但不会添加复选框。我做错了什么?我真的需要在继续之前解决这个问题

package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.Border;
import javax.swing.table.AbstractTableModel;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

import mappers.MemberMapper;
import domains.Member;

public class AddContingentGUI {
    private JFrame addContingentFrame;
    private JTable membersTable;
    private JScrollPane tableScrollPane;
    private JPanel tablePanel, panelRight, panelRightSide, checkBoxPanel, btnPanel;
    private JSeparator js;
    private JLabel idLbl, fNameLbl, lNameLbl;
    private JButton addBtn, cancelBtn;
    private JCheckBox janCB, febCB, marCB;

    public AddContingentGUI() {

        MemberMapper mMapper = new MemberMapper();
        final List<Member> data = mMapper.selectAllMembers();
        final MyTableModel m = new MyTableModel(data);

        membersTable = new JTable(m);
        membersTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        idLbl = new JLabel();
        fNameLbl = new JLabel();
        lNameLbl = new JLabel();
        janCB = new JCheckBox();
        febCB = new JCheckBox();
        marCB = new JCheckBox();

        addBtn = new JButton("Tilføj");
        cancelBtn = new JButton("Cancel");
        cancelBtn.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0) {
                addContingentFrame.setVisible(false);
            }   
        });

        tablePanel = new JPanel(new BorderLayout());
        panelRight = new JPanel();
        panelRight.setLayout(new GridBagLayout());
        //checkBoxPanel = new JPanel();
        btnPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));

        tableScrollPane = new JScrollPane(membersTable);
        membersTable.setFillsViewportHeight(true);
        membersTable.getColumnModel().getColumn(0).setPreferredWidth(100);
        membersTable.setBorder(BorderFactory.createLineBorder(Color.black));
        membersTable.getTableHeader().setReorderingAllowed(false);
        membersTable.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 1) {
                    JTable target = (JTable) e.getSource();
                    int row = target.getSelectedRow();
                    int column = target.getSelectedColumn();

                    Object index = membersTable.getValueAt(row, 0);
                    int indexValue = (Integer) index;

                    panelRight.removeAll();

                    GridBagConstraints c = new GridBagConstraints();

                    c.fill = GridBagConstraints.VERTICAL;
                    c.gridx = 0;
                    c.gridy = 0;
                    panelRight.add(idLbl, c);

                    c.fill = GridBagConstraints.VERTICAL;
                    c.gridx = 0;
                    c.gridy = 1;
                    panelRight.add(fNameLbl, c);

                    c.fill = GridBagConstraints.VERTICAL;
                    c.gridx = 0;
                    c.gridy = 2;
                    panelRight.add(lNameLbl, c);


                    c.fill = GridBagConstraints.HORIZONTAL;
                    c.gridx = 1;
                    c.gridy = 3;
                    panelRight.add(janCB, c);
                    panelRight.add(new JSeparator(JSeparator.HORIZONTAL));

                    idLbl.setText("MedlemsID: " + data.get(row).getMemberId());
                    fNameLbl.setText("Fornavn: " + data.get(row).getfName());
                    lNameLbl.setText("Efternavn: " + data.get(row).getlName());

                }
            }
        });



        tablePanel.setBounds(10, 10, 300, 400);
        tablePanel.setLayout(new BorderLayout());
        tablePanel.add(membersTable.getTableHeader(), BorderLayout.NORTH);
        tablePanel.add(membersTable, BorderLayout.WEST);
        tablePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

        js = new JSeparator(JSeparator.VERTICAL);

        btnPanel.add(addBtn);
        btnPanel.add(cancelBtn);

        panelRight.setLayout(new BoxLayout(panelRight, BoxLayout.PAGE_AXIS));
        panelRight.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        panelRightSide = new JPanel(new BorderLayout());
        panelRightSide.add(js, BorderLayout.WEST);
        panelRightSide.add(panelRight, BorderLayout.CENTER);
        panelRightSide.add(btnPanel, BorderLayout.SOUTH);



    }

    public void showGUI() {
        addContingentFrame = new JFrame();
        addContingentFrame.setTitle("Opret Kontingent");
        addContingentFrame.setLayout(new BorderLayout());
        addContingentFrame.setSize(700, 500);

        addContingentFrame.add(tablePanel, BorderLayout.WEST);
        addContingentFrame.add(panelRightSide, BorderLayout.CENTER);
        addContingentFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addContingentFrame.setVisible(true);
    }

    class MyTableModel extends AbstractTableModel {

        private static final long serialVersionUID = 1L;
        private List<Member> members = new ArrayList<Member>();

        public MyTableModel(List<Member> members) {
            this.members = members;
        }

        public void addMember(Member m) {
            members.add(m);
            int row = members.size() - 1;
            fireTableRowsInserted(row, row);
        }

        public void removeMemberFromTable(int row) {
            members.remove(row);
            fireTableRowsDeleted(row, row);
        }

        public void tableUpdate(int row, Member m) {
            if (row >= 0 && row < members.size()) {
                members.set(row, m);
                fireTableRowsUpdated(row, row);
            }
        }

        public List<Member> getMembers() {
            return new ArrayList<Member>(members);
        }

        @Override
        public int getColumnCount() {
            return 3;
        }

        @Override
        public int getRowCount() {
            return members.size();
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            Member m = members.get(rowIndex);

            switch (columnIndex) {
            case 0:
                return m.getMemberId();

            case 1:
                return m.getfName();

            case 2:
                return m.getlName();

            default:
                return "";
            }
        }

        public String getColumnName(int column) {
            switch (column) {
            case 0:
                return "MedlemsID";

            case 1:
                return "Fornavn";

            case 2:
                return "Efternavn";

            default:
                return "";
            }
        }

        public Class<?> getColumnClass(int columnIndex) {
            switch (columnIndex) {
            case 0:
                return String.class;

            case 1:
                return String.class;

            case 2:
                return String.class;

            default:
                return String.class;
            }
        }
    }
}
packagegui;
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.GridLayout;
导入java.awt.Insets;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.BorderFactory;
导入javax.swing.Box;
导入javax.swing.BoxLayout;
导入javax.swing.JButton;
导入javax.swing.JCheckBox;
导入javax.swing.JEditorPane;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.jsepator;
导入javax.swing.JTable;
导入javax.swing.JTextPane;
导入javax.swing.ListSelectionModel;
导入javax.swing.SwingConstants;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
导入javax.swing.border.border;
导入javax.swing.table.AbstractTableModel;
导入javax.swing.text.SimpleAttributeSet;
导入javax.swing.text.StyleConstants;
导入javax.swing.text.StyledDocument;
导入mappers.MemberMapper;
导入域。成员;
公共类addOrtentGUI{
私有JFrame add特遣队frame;
私有JTable成员稳定;
私有JScrollPane表crollPane;
私人JPanel tablePanel、panelRight、panelRight、checkBoxPanel、btnPanel;
私人JSepator js;
私人JLabel idLbl、fNameLbl、lNameLbl;
私有JButton addBtn、cancelBtn;
私人JCheckBox janCB、febCB、marCB;
public addornatgui(){
MemberMapper mMapper=新的MemberMapper();
最终列表数据=mMapper.selectAllMembers();
最终MyTableModel m=新的MyTableModel(数据);
membersTable=新的JTable(m);
membersTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
idLbl=新的JLabel();
fNameLbl=新的JLabel();
lNameLbl=新的JLabel();
janCB=新的JCheckBox();
febCB=新的JCheckBox();
marCB=新的JCheckBox();
addBtn=新的按钮(“Tilføj”);
cancelBtn=新按钮(“取消”);
cancelBtn.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
addOrdernatFrame.setVisible(false);
}   
});
tablePanel=newjpanel(newborderlayout());
panelRight=新的JPanel();
setLayout(新的GridBagLayout());
//checkBoxPanel=new JPanel();
btnPanel=newJPanel(newFlowLayout(FlowLayout.RIGHT));
tableScrollPane=新的JScrollPane(membersTable);
membersTable.setFillsViewPerThight(true);
membersTable.getColumnModel().getColumn(0).setPreferredWidth(100);
setboorder(BorderFactory.createLineBorder(Color.black));
membersTable.getTableHeader().setReorderingAllowed(false);
addMouseListener(新的MouseAdapter(){
公共无效mouseClicked(MouseEvent e){
如果(如getClickCount()==1){
JTable target=(JTable)e.getSource();
int row=target.getSelectedRow();
int column=target.getSelectedColumn();
对象索引=membersTable.getValueAt(行,0);
int indexValue=(整数)索引;
panelRight.removeAll();
GridBagConstraints c=新的GridBagConstraints();
c、 填充=GridBagConstraints.VERTICAL;
c、 gridx=0;
c、 gridy=0;
右面板。添加(idLbl,c);
c、 填充=GridBagConstraints.VERTICAL;
c、 gridx=0;
c、 gridy=1;
右面板。添加(fNameLbl,c);
c、 填充=GridBagConstraints.VERTICAL;
c、 gridx=0;
c、 gridy=2;
右面板。添加(lNameLbl,c);
c、 填充=GridBagConstraints.HORIZONTAL;
c、 gridx=1;
c、 gridy=3;
右面板。添加(janCB,c);
添加(新的JSepator(JSepator.HORIZONTAL));
idLbl.setText(“MedlemsID:+data.get(row.getMemberId());
fNameLbl.setText(“Fornavn:+data.get(row.getfName());
lNameLbl.setText(“Efternavn:+data.get(row.getlName());
}
}
});
桌板.立根(10,10,300,400);
tablePanel.setLayout(新的BorderLayout());
tablePanel.add(membersTable.getTableHeader(),BorderLayout.NORTH);
tablePanel.add(membersTable,BorderLayout.WEST);
tablePanel.setBorder(BorderFactory.createEmptyByOrder(10,10,10,10));
js=新的JSepator(jsepator.VERTICAL);
btnPanel.add(addBtn);
btnPanel.add(取消btn);
panelRight.setLayout(新的BoxLayout(panelRight,BoxLayout.PAGE_轴));
panelRight.setboorder(BorderFactory.createEmptyByOrder(10,10,10,10));
panelRightSide=newjpanel(newborderlayout());
panelRightSide.add(js,BorderLayout.WEST);
panelRightSide.add(panelRight,BorderLayout.CENTER);
panelRightSide.add(btnPanel,BorderLayout.SOUTH);
}
公共void showGUI(){
panelRight.revalidate();
panelRight.repaint();