2014-12-23 24 views
0

我想在JTabbedPane的JPanel

我这最后一个标签后添加JPanelTengo esto-I have This

我想是这样的: Quiero Esto-I want this

的最重要的部分是选项卡后JPanel的布局可能会有所不同,并且在调整主JFrame的大小时需要调整其大小。

我试过OverlayLayout,JLayeredPane和玻璃面板,但没有运气。

+1

你必须进入JTabbedPane的外观和感觉代表我想确定它是如何绘制标签的...... – MadProgrammer

+0

现在,我正在制作一个新的Tab,Tab标题的组件是一个带有我需要的所有东西(按钮,文本框,标签等)的'JPanel',但我需要使最后一个标题标题完整宽度。 – jotapdiez

回答

3

我OverlayLayout试过,

这里是与OverlayLayout工作的例子,工程:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.plaf.*; 

public class TabbedPaneWithComponent 
{ 
    private static void createAndShowUI() 
    { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new OverlayLayout(panel)); 

     JTabbedPane tabbedPane = new JTabbedPane(); 
     tabbedPane.add("1", new JTextField("one")); 
     tabbedPane.add("2", new JTextField("two")); 
     tabbedPane.setAlignmentX(1.0f); 
     tabbedPane.setAlignmentY(0.0f); 

     JCheckBox checkBox = new JCheckBox("Check Me"); 
     checkBox.setOpaque(false); 
     checkBox.setAlignmentX(1.0f); 
     checkBox.setAlignmentY(0.0f); 

     panel.add(checkBox); 
     panel.add(tabbedPane); 

     JFrame frame = new JFrame("TabbedPane With Component"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(panel); 
     frame.setLocationByPlatform(true); 
     frame.setSize(400, 100); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 

当然,这仅适用它有可用来显示组件的空间。

唯一正确的解决方案是创建一个自定义选项卡窗格用户界面,允许您向右侧添加组件。我不知道该怎么做。

+0

加上一个,用GBC也是可能的,创建一个浮动的又名工具栏(更好使用JMenu而不是JPanel) – mKorbel

+0

我以前试过,但用'JPanel'而不是'JCheckBox'不起作用,至少我。我使用带标题上的自定义组件的新选项卡和CustomTabbedPaneUI上的一些更改。现在它看起来像[this](https://drive.google.com/file/d/0Bz8VTzJV6y1FY0otMGZXZzR0QUU/view?usp=sharing) – jotapdiez

+0

@jotapdiez,'用JPanel而不是JCheckBox不起作用' - 它的工作原理,但您需要将面板的最大尺寸设置为首选尺寸,否则面板将在选项卡窗格上绘制。 '我用标题上的自定义组件创建了新选项卡,并在CustomTabbedPaneUI上进行了一些更改.'因为我认为这是一个更好的方法。您应该将解决方案作为答案发布。这可能会使论坛的其他用户受益。 – camickr