2013-11-21 2 views
0

У меня есть эта проблема. Когда я пытаюсь изменить свой графический интерфейс в панели panelRight, ничего не происходит. Он остается неизменным. Если вы посмотрите на мой MouseListener для моего «memberTable», он должен добавить панель справа, но когда я попытаюсь сделать это с помощью GridBagLayout, ничего не произойдет или добавит информацию, которую я хочу, но не флажок. Что я делаю не так? Мне действительно нужно решить эту проблему, прежде чем двигаться дальше.Проблема с GUI - макет действует странно

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

ответ

2

Необходимо повторно проверить/перекрасить панель после этих изменений.

panelRight.revalidate(); 
panelRight.repaint(); 
+0

спасибо! Это сработало! – ilhami

+0

, но посмотрите на это сейчас, когда я перемещаю свой CheckBox под JSeparator. http://tinypic.com/r/345mtf8/5 ---- почему это происходит? – ilhami

Смежные вопросы