2017-04-09 4 views
0

나는 JTabbedPane에 문제를 가지고, 내 JPanel 중 하나에 테두리가 나는 경계는 기본적으로이처럼 JTabbedPane가 가지고있는 레이아웃에 따라 확장되도록 JTabbedPane이 자신의 레이아웃의 한 가정JTabbedPane의 레이아웃을 변경할 수 있습니까?

How it turns out.

나는 그가 완전히 망쳐 놨지만, jTabbedPane.setLayout(new GridBagLayout());를 사용하여 JTabbedPane의 테두리를 변경 시도하고 다음과 같이 밝혀 :

After changing the layout.

이 (내가 내부 경계가 아닌 외부를 달성하기 위해 노력하고 명확히하기 위해.)처럼 그것을 보이게하기 위해 노력했습니다 6,

방법은 다음과 같습니다

Possible outcome.

실제로 할 수 있습니다 달성하고자하는 것을 수용하기 위해 레이아웃을 변경하거나 더 좋은 방법이 있습니까?

모든 도움을 주시면 대단히 감사하겠습니다. 감사합니다. 내 질문에 개선이 필요하거나 다른 코드 또는 설명이 필요한 경우 알려주십시오.

코드 :

import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableModel; 
import java.awt.*; 

public class Test extends JFrame 
{ 
    public Test() 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       try 
       { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 

       setLayout(new GridBagLayout()); 

       add(new HomePanel()); 

       pack(); 
       setVisible(true); 
       setLocationRelativeTo(null); 
       setExtendedState(JFrame.MAXIMIZED_BOTH); 
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      } 
     }); 
    } 

    public static void main(String[] args) 
    { 
     Test t = new Test(); 
    } 

    public class HomePanel extends JPanel 
    { 
     protected JTabbedPane tabbedPane; 

     public HomePanel() 
     { 
      tabbedPane = new JTabbedPane(); 
      tabbedPane.setPreferredSize(new Dimension(800, 500)); 

      tabbedPane.addTab("Your Bookings", new ShowBookingPanel()); 

      add(tabbedPane); 

     } 
    } 

    public class ShowBookingPanel extends JPanel 
    { 
     protected JTable bookingTable; 
     protected JScrollPane scrollPane; 


     public ShowBookingPanel() 
     { 
      TitledBorder titledBorder = new TitledBorder("Your Bookings"); 
      titledBorder.setTitleJustification(TitledBorder.CENTER); 
      Border border = new CompoundBorder(titledBorder, new EmptyBorder(40, 50, 40, 50)); 

      setBorder(border); 

      String[] columnNames = {"Check-In Date", "Check-Out Date", "Room Type", "Price", "Action"}; 
      Object[][] data = {{"22/09/1997", "TBA", "Single", "Priceless"}, {"12/03/2017", "23/04/2017", "Double", "£50"}, 
       {"12/03/2017", "23/04/2017", "Double", "£50"}, {"12/03/2017", "23/04/2017", "Double", "£50"}, 
       {"12/03/2017", "23/04/2017", "Double", "£50"}, {"12/03/2017", "23/04/2017", "Double", "£50"}, 
       {"12/03/2017", "23/04/2017", "Double", "£50"}, {"12/03/2017", "23/04/2017", "Double", "£50"}}; 

      TableModel model = new DefaultTableModel(data, columnNames) 
      { 
       public boolean isCellEditable(int row, int column) 
       { 
        return false; 
       } 
      }; 

      bookingTable = new JTable(model); 
      bookingTable.setPreferredScrollableViewportSize(new Dimension(500, 300)); 
      bookingTable.setFillsViewportHeight(true); 
      bookingTable.getTableHeader().setReorderingAllowed(false); 
      bookingTable.getTableHeader().setResizingAllowed(false); 
      bookingTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

      scrollPane = new JScrollPane(bookingTable); 

      setLayout(new GridBagLayout()); 

      add(scrollPane); 
     } 
    } 
} 
+0

* "나는 이것을 다음과 같이 만들었습니다."* 제목이 지정된 다른 테두리 안에 빈 테두리 안에 제목이있는 테두리를 사용하면됩니다. 그러나 정확히 같은 제목의 제목이 붙은 두 개의 테두리가있는 목적은 무엇입니까? 위의 내용은'HomePanel' 소스의 끝에'ShowBookingPanel'에 대한 수입을 나누어 준 것으로 보입니다. 더 나은 도움을 받으려면 [MCVE] 또는 [단락, 자체 포함, 올바른 예] (http://www.sscce.org/)를 게시하십시오. (하나의 소스 파일, 오직 하나의 수입품 세트,'main' 메쏘드가있는'public' 클래스, 그리고 하나 이상의 기본 접근 클래스를 포함합니다.) –

+0

미안 해요. 나는 단지 그 제목이 경계선이되기를 원했고, 원래 제목을 제거하지 않았습니다. 거기에 있었던 국경. 두 번째 제목의 경계는 내가 가고 있었던 경계 다. 파일은 세 개의 개별 파일이므로 세 파일을 결합하면 작동하는지 알 수 없습니다. –

+0

* 두 번째 경계선은 내가 가고 있었던 경계선입니다. * 두 번째는 '안쪽'또는 '외부'입니까? * "파일은 세 개의 개별 파일이므로 세 파일을 결합하면 작동하는지 알 수 없습니다."* 그렇게됩니다. 그러나 당신이 모르는 것을 나에게 말하기보다는 스스로 해보는 것이 어떻습니까? –

답변

2

변경 :

 tabbedPane.addTab("Your Bookings", new ShowBookingPanel()); 

사람 : 구성 요소가 유일한 구성 요소로 추가됩니다 같이 GridBagLayout만큼 구성 요소를 중심합니다

 JPanel centeredPanel = new JPanel(new GridBagLayout()); 
     centeredPanel.add(new ShowBookingPanel()); 

     tabbedPane.addTab("Your Bookings", centeredPanel); 

, 스트레칭하지 않고 기본 제약 조건을 사용합니다.

관련 문제