【问题标题】:How To add JTextArea to Closable TabbedPane如何将 JTextArea 添加到可关闭的 TabbedPane
【发布时间】:2014-11-20 06:31:10
【问题描述】:

我想将带有 Textarea 的 Scrollpane 添加到 Tabbedpane。我为此编写了代码。但是,它显示了一个小的 textarea 而不是整个框架。我在 createAction() 方法中编写了这段代码。我想要带有关闭按钮的 tabbedpane 并添加 Scrollpane到 tabbedpane。请检查一次。谢谢。

我的代码:

public class ClosableTabbedpane extends javax.swing.JFrame {
JTextArea tx;
int i=0;
public ClosableTabbedpane() {

    initComponents();

}

private static JPanel getTitlePanel(final JTabbedPane tabbedPane, final JPanel panel, String title) {
    JPanel titlePanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
    titlePanel.setOpaque(false);
    JLabel titleLbl = new JLabel(title);
    titleLbl.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
    titlePanel.add(titleLbl);
    JButton closeButton = new JButton("x");

    closeButton.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            tabbedPane.remove(panel);
        }
    });
    titlePanel.add(closeButton);
    return titlePanel;
}

@SuppressWarnings("unchecked")                        
private void initComponents() {

    tabbedPane = new javax.swing.JTabbedPane();
    jMenuBar1 = new javax.swing.JMenuBar();
    jMenu1 = new javax.swing.JMenu();
    create = new javax.swing.JMenuItem();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jMenu1.setText("File");

    create.setText("Create");
    create.addActionListener(new java.awt.event.ActionListener() {
        @Override
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            createActionPerformed(evt);
        }
    });
    jMenu1.add(create);

    jMenuBar1.add(jMenu1);

    setJMenuBar(jMenuBar1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 331, Short.MAX_VALUE)
    );

    pack();
}                     

private void createActionPerformed(java.awt.event.ActionEvent evt) {                                       
    i++;
    tx = new JTextArea();
    JPanel panel = new JPanel();
    panel.setBounds(400,400,400,400);
    tx.setFont(new java.awt.Font("Miriam Fixed", 0, 13));
    JScrollPane  scrollpane=new JScrollPane(tx);
    panel.add(scrollpane);
    panel.setOpaque(false);
    tabbedPane.add(panel);
    tabbedPane.setTabComponentAt(tabbedPane.indexOfComponent(panel), getTitlePanel(tabbedPane, panel, "Doc"+i));  
}                                      

public static void main(String args[]) {
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(ClosableTabbedpane.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(ClosableTabbedpane.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(ClosableTabbedpane.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(ClosableTabbedpane.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new ClosableTabbedpane().setVisible(true);
        }
    });
}              
private javax.swing.JMenuItem create;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem open;
private javax.swing.JTabbedPane tabbedPane;               
}

【问题讨论】:

  • panel.setBounds(400,400,400,400); Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。
  • 当我删除 setBounds() 方法时,它显示相同的输出。请根据您的修改修改代码。
  • 请任何人提供上述应用程序的解决方案。

标签: java swing layout-manager jtextarea jtabbedpane


【解决方案1】:

要建议文本区域的大小,请在创建时指定所需的行数和列数。例如

tx = new JTextArea(3,40);

【讨论】:

  • 当我运行应用程序时框架尺寸很小,然后最大化我的框架,文本区域大小没有扩大。用给定的行和列固定。
  • The frame is small in size 需要pack() 框架。
  • 我写了 tx=new JTextArea(170,170); Texarea 已完美添加,但未应用 Scrollpane。当我越过 Textarea 行/文档的末尾时,Scrollpane 无法正常工作/显示。请检查一次。
猜你喜欢
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多