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