2013-02-28 3 views
2

Я использую NetBeans GUI Builder для создания графического интерфейса (так что весь код генерируется Netbeans).JScrollPane вертикальная полоса прокрутки слишком широкая

Все выглядит отлично в Preview Design, но когда я запускаю приложение, то JScrollPane отображается плохо ...

Default GUI

... как вы можете видеть, только половина скроллинга видна ,

Я попытался ручной настройкой JScrollBar для JScrollPane, используя свой собственный метод:

jScrollPane1.setVerticalScrollBar(getScrollBarForScrollPane()); 

Но что дает этот результат ...

New GUI

Может быть, есть некоторое свойство на JScrollBar или JScrollPane, которые мне нужно изменить?

Я занимаюсь этим много лет, поэтому надеюсь, что у кого-то есть предложения! :)

Вот весь мой код ...

package uk.co.mobilewebexpert.myappmonitor; 

import javax.swing.ImageIcon; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.table.DefaultTableModel; 

public class MyAppMonitorJFrame extends javax.swing.JFrame { 

    private final ImageIcon greenIcon = new ImageIcon(getClass().getResource("/green_light.jpg")); 
    private final ImageIcon amberIcon = new ImageIcon(getClass().getResource("/amber_light.jpg")); 
    private final ImageIcon redIcon = new ImageIcon(getClass().getResource("/red_light.jpg")); 

    /** 
    * Creates new form MyAppMonitorJFrame 
    */ 
    public MyAppMonitorJFrame() { 
     initComponents(); 

     DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer(); 
     rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER); 
     rightRenderer.setFont(new java.awt.Font("Tahoma", 1, 21)); 
     for (int i = 0; i < jTable1.getColumnCount(); i++) { 
      jTable1.getColumn(jTable1.getColumnName(i)).setHeaderRenderer(rightRenderer); 
      jTable1.getColumn(jTable1.getColumnName(i)).setCellRenderer(rightRenderer); 

     } 
     //jTable1.getTableHeader().setFont(new java.awt.Font("Tahoma", 1, 11)); 


     DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel(); 
     tableModel.addRow(new Object[]{greenIcon, "2", "3", "4", "5", "6", "7"}); 


     jScrollPane1.setInsets 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jPanel1 = new javax.swing.JPanel(); 
     jLabel6 = new javax.swing.JLabel(); 
     jLabel7 = new javax.swing.JLabel(); 
     jLabel8 = new javax.swing.JLabel(); 
     jLabel9 = new javax.swing.JLabel(); 
     jLabel10 = new javax.swing.JLabel(); 
     jLabel1 = new javax.swing.JLabel(); 
     jLabel2 = new javax.swing.JLabel(); 
     jLabel3 = new javax.swing.JLabel(); 
     jLabel4 = new javax.swing.JLabel(); 
     jLabel5 = new javax.swing.JLabel(); 
     jPanel3 = new javax.swing.JPanel(); 
     jLabel11 = new javax.swing.JLabel(); 
     jTextField1 = new javax.swing.JTextField(); 
     jButton1 = new javax.swing.JButton(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTable1 = new javax.swing.JTable(); 
     jScrollPane2 = new javax.swing.JScrollPane(); 
     jTextPane1 = new javax.swing.JTextPane(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setTitle("MYOB"); 

     jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Status Summary", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 12))); // NOI18N 

     jLabel6.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N 
     jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel6.setText("Total"); 
     jLabel6.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 

     jLabel7.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N 
     jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/green_light_2.jpg"))); // NOI18N 
     jLabel7.setText("Online"); 
     jLabel7.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); 

     jLabel8.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N 
     jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/amber_light_2.jpg"))); // NOI18N 
     jLabel8.setText("Suspect"); 
     jLabel8.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); 

     jLabel9.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N 
     jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel9.setIcon(new javax.swing.ImageIcon(getClass().getResource("/red_light_2.jpg"))); // NOI18N 
     jLabel9.setText("Offline"); 
     jLabel9.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); 

     jLabel10.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N 
     jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel10.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); 

     jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel1.setText("?"); 

     jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel2.setText("?"); 

     jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel3.setText("?"); 

     jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel4.setText("?"); 

     jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
      .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE, 59, Short.MAX_VALUE) 
      .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jLabel8, javax.swing.GroupLayout.DEFAULT_SIZE, 69, Short.MAX_VALUE) 
      .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jLabel9, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE) 
      .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jLabel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, 10, Short.MAX_VALUE)) 
      .addContainerGap())); 
     jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
      .addComponent(jLabel6) 
      .addComponent(jLabel7) 
      .addComponent(jLabel8) 
      .addComponent(jLabel9) 
      .addComponent(jLabel10)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
      .addComponent(jLabel1) 
      .addComponent(jLabel2) 
      .addComponent(jLabel3) 
      .addComponent(jLabel4) 
      .addComponent(jLabel5)) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); 

     jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Search", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 12))); // NOI18N 

     jLabel11.setText("Enter device serial number"); 

     jTextField1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jTextField1ActionPerformed(evt); 
      } 
     }); 

     jButton1.setText("Go"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); 
     jPanel3.setLayout(jPanel3Layout); 
     jPanel3Layout.setHorizontalGroup(
      jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel3Layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel3Layout.createSequentialGroup() 
      .addComponent(jLabel11) 
      .addGap(0, 0, Short.MAX_VALUE)) 
      .addGroup(jPanel3Layout.createSequentialGroup() 
      .addComponent(jTextField1) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jButton1))) 
      .addContainerGap())); 
     jPanel3Layout.setVerticalGroup(
      jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel3Layout.createSequentialGroup() 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(jLabel11) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
      .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addComponent(jButton1)))); 

     jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Device Details", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 12))); // NOI18N 
     jScrollPane1.setVerticalScrollBar(getScrollBarForScrollPane()); 

     jTable1.setBackground(new java.awt.Color(254, 254, 254)); 
     jTable1.setModel(new javax.swing.table.DefaultTableModel(
      new Object[][]{ 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null} 
     }, 
      new String[]{ 
      "Serial Number", "Device Name", "Status", "Current Uptime", "Current Downtime", "Last Known Uptime" 
     })); 
     jTable1.setGridColor(new java.awt.Color(254, 254, 254)); 
     jTable1.setShowHorizontalLines(false); 
     jTable1.setShowVerticalLines(false); 
     jScrollPane1.setViewportView(jTable1); 

     jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Log", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 12))); // NOI18N 
     jScrollPane2.setViewportView(jTextPane1); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) 
      .addGroup(layout.createSequentialGroup() 
      .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addComponent(jScrollPane2)) 
      .addContainerGap())); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
      .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE) 
      .addContainerGap())); 

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

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     // TODO add your handling code here: 
    } 

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) { 
     // TODO add your handling code here: 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    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(MyAppMonitorJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(MyAppMonitorJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(MyAppMonitorJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(MyAppMonitorJFrame.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 MyAppMonitorJFrame().setVisible(true); 
      } 
     }); 
    } 

    public javax.swing.JScrollBar getScrollBarForScrollPane() { 
     int width = 50; //set extremely large to exaggerate the issue 
     javax.swing.JScrollBar jScrollBar = new javax.swing.JScrollBar(javax.swing.JScrollBar.VERTICAL); 
     jScrollBar.setPreferredSize(new java.awt.Dimension(width, Integer.MAX_VALUE)); 
     return jScrollBar; 
    } 
// Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel10; 
    private javax.swing.JLabel jLabel11; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JLabel jLabel4; 
    private javax.swing.JLabel jLabel5; 
    private javax.swing.JLabel jLabel6; 
    private javax.swing.JLabel jLabel7; 
    private javax.swing.JLabel jLabel8; 
    private javax.swing.JLabel jLabel9; 
    private javax.swing.JPanel jPanel1; 
    private javax.swing.JPanel jPanel3; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JScrollPane jScrollPane2; 
    private javax.swing.JTable jTable1; 
    private javax.swing.JTextField jTextField1; 
    private javax.swing.JTextPane jTextPane1; 
// End of variables declaration 
} 
+3

Вот почему я ненавижу использовать GUI-конструктор для написания приложений для качания. –

+0

Я попытался построить JDK 1.6 и JDK 1.7. –

+0

Eng, я нашел, что GUI Builder действительно полезен (гораздо лучше, чем ударить головой о стену с менеджерами макетов), но именно эта проблема вызывает меня. –

ответ

2

Как вы можете видеть в этом снимке from the reference, ваша полоса прокрутки совершенен: enter image description here

+1

Как это отвечает на вопрос? – 2013-02-28 19:41:20

+0

Вопрос - это глупость: полоса прокрутки хорошо нарисована. Решение проблемы не существует. – Aubin

+1

-1, так как это не отвечает на вопрос. Извините – 2013-02-28 19:47:18

1
  1. GUI свинг правильно устрояется , означающие методы и код, сгенерированные GUI_Builer :-),

  2. одна из проблем генерируется из строки кода tableModel.addRow(new Object[]{greenIcon, "2", "3", "4", "5", "6", "7"});

  3. вы добавили новую строку в JTable, к GUI свинг, после того, как называется pack() последней строки кода pack(); в initComponents();,

  4. , но главная проблема в том, что PreferredSize рассчитывается внутренне от строки кода .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE), затем переопределить этот размер, используя вполне подходящий метод jTable1.setPreferredScrollableViewportSize(jTable1.getPreferredSize()); вполне довольно игнорировали

  5. писать этот код вручную

+1

Я очень ценю пятое предложение :) –

+0

@Yohan hehehe, но мне нравится все LayoutManagers, что некоторые из них действительно сумасшедшие и против всех логических принципов ... – mKorbel