2014-04-03 3 views
0

Я пытаюсь создать приложение, в котором список номеров указан в области WESTBorderLayout и соответствующих панелях в CENTER. Проблема в том, чтоИзменение размера и значок на jpanel с расположением карты

  • Мне нужен район WEST, чтобы быть шире. Прямо сейчас он содержит JList в JPanel, который изменяет размер до размера по умолчанию. Предпочтительный размер? Не уверен!
  • Мне нужно иметь значок или символ алфавита 'x' вправо 1 или 2. Итак, когда я закрою его, я могу закрыть соответствующую панель в CENTER.

КОД:

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.EventQueue; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.Vector; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.border.MatteBorder; 
import java.awt.Color; 

public class Sample1 extends JFrame { 

    private JPanel contentPane; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Sample1 frame = new Sample1(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public Sample1() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new BorderLayout(0, 0)); 
     setContentPane(contentPane); 

     JPanel panel = new JPanel(); 
     panel.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0))); 
     contentPane.add(panel, BorderLayout.WEST); 

     Vector<String> str = new Vector<>(); 
     str.add("1"); 
     str.add("2"); 
     final JList list = new JList(); 
     list.setListData(str); 
     panel.add(list); 

     final JPanel panel_1 = new JPanel(); 
     panel_1.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0))); 
     contentPane.add(panel_1, BorderLayout.CENTER); 
     panel_1.setLayout(new CardLayout(0, 0)); 

     JPanel panel_2 = new JPanel(); 
     panel_1.add(panel_2, "1"); 

     JLabel lblNewLabel = new JLabel("First"); 
     panel_2.add(lblNewLabel); 

     JPanel panel_3 = new JPanel(); 
     panel_1.add(panel_3, "2"); 

     JLabel lblNewLabel_1 = new JLabel("Second"); 
     panel_3.add(lblNewLabel_1); 


     list.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e){ 
       CardLayout layout = (CardLayout) panel_1.getLayout(); 
       layout.show(panel_1, list.getSelectedValue().toString()); 
      } 
     }); 
    } 

} 

ответ

1

Возможно использовать JTable с двумя колоннами. Второй столбец может содержать кнопку закрытия. См. Table Button Column для примера этого подхода.

В противном случае вам нужно будет добавить панель в WEST. Панель будет содержать JList и другой компонент рядом с JList, чтобы действовать как кнопка закрытия. Проблема с этим подходом заключается в том, чтобы компоненты выстроились в линию и чтобы кнопка узнала, какая панель закрывается.

0

Вы пытались использовать GridLayout или BoxLayout, также попробуйте настроить свой графический интерфейс с помощью отдельных методов.

Настройка GUI код:

private void setupGUI() { 
     JPanel westP = setupWestPane(); 

     getContentPane().add(westPa, BorderLayout.WEST);   
    } 

установки West Pane Код:

private JPanel setupWestPane() { 
    JPanel westP = setupWestPanel(); 


    JPanel p = new JPanel(new GridLayout(1, 2, 20, 0)); 
    p.setOpaque(false); 
    p.add(westP); 
    return p; 
} 

установки West Panel Код:

private JPanel setupPlayerPanel() { 
     list1 = new JList(); 
     list1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

     // If you want to add a listener to the listbox 
     // list1.addListSelectionListener(this); 
     JScrollPane jsp = new JScrollPane(playerList); 

     JPanel p = new JPanel(new BorderLayout()); 
     p.setOpaque(false); 
     p.add(new JLabel("List"), BorderLayout.NORTH); 
     p.add(jsp, BorderLayout.CENTER); 

     return p; 
    } 

Код выше, является лишь примером.

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