Избегайте пробелов между JToolBar и JTabbedPane

#java #swing #awt #layout-manager

#java #качать #awt #макет-менеджер

Вопрос:

Я создавал JFrame пример. В этом процессе сначала я беру фрейм, затем добавляю JMenuBar , затем добавляю JToolbar , а затем добавляю JTextPane . В строке меню я добавляю File Menu , затем добавляю create MenuItem в меню file. Когда я нажимаю на пункт меню «Создать», откройте внутренний фрейм как обычный документ. Но между панелью инструментов и панелью вкладок отображается огромное пространство. Как избежать этого пробела?

Вот код:

 public class CreateDoc extends javax.swing.JFrame {
JScrollPane scrollPane;
JTextPane textPane;
int i=0;
public CreateDoc() {
    initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    createToolBar = new javax.swing.JToolBar();
    Help = new javax.swing.JButton();
    tabbedPane = new javax.swing.JTabbedPane();
    createMenuBar = new javax.swing.JMenuBar();
    createMenu = new javax.swing.JMenu();
    create = new javax.swing.JMenuItem();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    createToolBar.setRollover(true);

    Help.setIcon(new javax.swing.ImageIcon(getClass().getResource("/about.png"))); // NOI18N
    Help.setToolTipText(create.getText());
    Help.setFocusable(false);
    Help.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
    Help.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
    createToolBar.add(Help);

    createMenu.setText("File");

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

    createMenuBar.add(createMenu);

    setJMenuBar(createMenuBar);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(createToolBar, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE)
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(createToolBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(0, 254, Short.MAX_VALUE))
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(0, 22, Short.MAX_VALUE)
                .addComponent(tabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 257, javax.swing.GroupLayout.PREFERRED_SIZE)))
    );

    pack();
}// </editor-fold>                        

private void createActionPerformed(java.awt.event.ActionEvent evt) {                                       
    final JInternalFrame internalFrame = new JInternalFrame("");
    i  ;
    internalFrame.setName("Document" i);
    internalFrame.setClosable(true);
    internalFrame.setAutoscrolls(true);
    textPane=new JTextPane();
    textPane.setFont(new java.awt.Font("Miriam Fixed", 0, 14));
    scrollPane=new JScrollPane(textPane);
        internalFrame.add(scrollPane);
        tabbedPane.add(internalFrame);
        internalFrame.setSize(internalFrame.getMaximumSize());
        internalFrame.pack();
        internalFrame.setVisible(true);
}                                      

public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    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(CreateDoc.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(CreateDoc.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(CreateDoc.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(CreateDoc.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new CreateDoc().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
private javax.swing.JButton Help;
private javax.swing.JMenuItem create;
private javax.swing.JMenu createMenu;
private javax.swing.JMenuBar createMenuBar;
private javax.swing.JToolBar createToolBar;
private javax.swing.JTabbedPane tabbedPane;
// End of variables declaration                   
}
  

Ответ №1:

Удалите строку .addGap(0, 22, Short.MAX_VALUE) с .addGap(0, 0, Short.MAX_VALUE) помощью . Решает ли это вашу проблему?

РЕДАКТИРОВАТЬ: комментарий принят во внимание. Я немного изменил используемый макет, чтобы он работал правильно.

 private void initComponents() {

    createToolBar = new javax.swing.JToolBar();
    Help = new javax.swing.JButton();
    tabbedPane = new javax.swing.JTabbedPane();
    createMenuBar = new javax.swing.JMenuBar();
    createMenu = new javax.swing.JMenu();
    create = new javax.swing.JMenuItem();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    createToolBar.setRollover(true);
// Commented for testing only - pls uncomment
//      Help.setIcon(new javax.swing.ImageIcon(getClass().getResource(
//              "/about.png"))); // NOI18N
        Help.setToolTipText(create.getText());
        Help.setFocusable(false);
        Help.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        Help.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
    createToolBar.add(Help);

    createMenu.setText("File");

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

    createMenuBar.add(createMenu);

    setJMenuBar(createMenuBar);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
            getContentPane());
    layout.setHorizontalGroup(
        layout.createParallelGroup(Alignment.LEADING)
            .addComponent(createToolBar, GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE)
            .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 415, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(createToolBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addGap(2)
                .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE))
    );
    getContentPane().setLayout(layout);

    pack();
}
  

Комментарии:

1. Спасибо, при запуске программы окно результатов будет небольшим, а не максимальным. когда вы разворачиваете окно, затем нажимаете создать menuitem, тогда между панелью инструментов и панелью вкладок отображается пробел. Я пробовал вышеупомянутые решения, но не работал. Пожалуйста, проверьте это один раз

2. Я бы также рекомендовал использовать Eclipse с Google Web Tool Kit и Window Builder. Это намного лучше (чище), чем Netbeans для создания графического интерфейса в Swing.

Ответ №2:

Я выполнил ваш код и нашел решение, которое вы ищете. В вашем коде:

 layout.setVerticalGroup(
...
  

во втором addGroup варианте просто измените значение 22 в коде addGap(0, 22, Short.MAX_VALUE) .
Уменьшение значения 22 поможет вам уменьшить разрыв между вашей панелью вкладок и строкой меню.

Спасибо.

Комментарии:

1.Спасибо, при запуске программы окно результатов будет небольшим, а не максимальным.когда вы разворачиваете окно, затем нажимаете создать menuitem, тогда между панелью инструментов и панелью вкладок отображается пробел.Я пробовал вышеупомянутые решения, но не работал.Пожалуйста, проверьте это один раз

Ответ №3:

Вы не должны добавлять пробел в tabpane в setVerticalGroup(),

Измененный код:

 layout.setVerticalGroup(layout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(
                        layout.createSequentialGroup()
                                .addComponent(createToolBar,
                                        javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(0, 254, Short.MAX_VALUE))
                .addGroup(
                        layout.createParallelGroup(
                                javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(
                                        javax.swing.GroupLayout.Alignment.TRAILING,
                                        layout.createSequentialGroup()
                                                .addGap(0, 0, Short.MAX_VALUE) // Do not add gap here or set as minimum**
                                                .addComponent(
                                                        tabbedPane,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        257,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE))));

        pack();
  

введите описание изображения здесь

Ответ №4:

Измените макет группы, как показано ниже:

 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        layout.setHorizontalGroup(
            layout.createParallelGroup(Alignment.LEADING)
                .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE)
                .addComponent(createToolBar, GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(createToolBar, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(tabbedPane, GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE))
        );