#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))
);