2017-04-09 11 views
0

私はJTabbedPaneに問題がある、私は私のJPanelの1の境界線を持っていると私はJTabbedPaneは国境は基本的にこのように、JTabbedPaneが持つレイアウトに応じて拡大するので、それは独自のレイアウトのしていると仮定します。JTabbedPaneのレイアウトを変更することはできますか?

How it turns out.

は、私は、それは完全にそれを台無しにかかわらず、jTabbedPane.setLayout(new GridBagLayout());を使用して、JTabbedPaneの境界線を変更しようと、それは次のように判明:

After changing the layout.

私はそれが見えるようにしようとしてきた方法は、このようなものです(明確にするために、私は内側の境界線ではなく、外側の1を達成しようとしています。):

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

*「見た目を見せようとしてきた方法は次のようなものです。」*別のタイトル付きボーダー内の空白の枠内でタイトル付き枠を使用することで実現できました。しかし、全く同じタイトルの2つのタイトル付きボーダーを持つ目的は何ですか?上記は 'HomePanel'のソースの最後に' ShowBookingPanel'のインポートを分割したようです。もっと早く助けを求めるには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 (1つのソースファイル、1組のインポートファイル、 'main'メソッドを持つ' public'クラス、および1つ以上のデフォルトアクセスクラスを含みます) –

+0

申し訳ありません私はちょうど1つのタイトルの境界線を望んでいました、そこにあった国境。 2番目のタイトルのボーダーは私が行っていたものです。ファイルは3つの別々のファイルなので、3つを組み合わせるとうまくいくかどうかわかりませんでした。 –

+0

*「2番目のタイトルは境界線です」* 2番目は「内側」または「外側」ですか? *「ファイルは3つの別々のファイルなので、3つを組み合わせるとうまくいくかどうかわかりませんでした」*それができます。しかし、あなたが知らないものを私に言っているのではなく、自分でそれを試してみませんか? –

答えて

2

変更:

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

:を

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

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

GridBagLayoutは、限りコンポーネントのみ成分として添加される成分を中心に説明しますそれを伸ばすことなく、デフォルトの制約を使用します。

関連する問題