2010-10-10 99 views
1

我在我的十六进制编辑器上有一些JScrollPanes,它们没有显示出来。 任何想法为什么?JScrollPane没有显示?

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 
import java.util.Vector; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStream; 

public class HexEditor extends JFrame{ 
    JScrollPane hexScroll; 
    JScrollPane byteScroll; 
    JTextArea hexArea; 
    JTextArea byteArea; 
    JFileChooser chooser;// = new JFileChooser(); 
    FileInputStream fin; 
    JMenuBar menuBar; 
    JMenu file; 
     JMenuItem load; 

    public HexEditor(){ 
     super("Cypri's java hex editor"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //this.setResizable(false); 

     chooser = new JFileChooser(); 

     load = new JMenuItem("Load"); 
      load.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent event) { 

        try{ 

         openFile(); 
         fin = new FileInputStream(chooser.getSelectedFile()); 

         int ch; 
         StringBuffer strContent = new StringBuffer(""); 

         for(int i = 0; (ch = fin.read()) != -1; i++){ 
          String s = Integer.toHexString(ch); 

          if(s.length() < 2) 
           s = "0" + Integer.toHexString(ch); 

          if(i < 10) 
           strContent.append(" " + s.toUpperCase()); 

          else{ 
           strContent.append(" " + s.toUpperCase() + "\n"); 
           i = 0; 
          } 
         } 

         hexArea.setText(strContent.toString()); 

         byte[] b = hexStringToByteArray(strContent.toString()); 
         char[] chars = new char[b.length]; 
         String byteText = ""; 
         int newLine = 0; 
         for(int i = 0; i < b.length; i++){ 
          chars[i] = (char) b[i]; 
          byteText += chars[i]; 

          newLine++; 
          if(newLine > 10){ 
           byteText += "\n"; 
           newLine = 0; 
          } 
         } 

         hexArea.setText(strContent.toString()); 
         byteArea.setText(byteText); 
         packMe(); 

         //textArea.setWrapStyleWord(true); 
         //textArea.setColumns(50); 
         //textArea.setRows(50); 
        } 

        catch(Exception e){ 
         e.printStackTrace(); 
        } 
       } 
      }); 

     file = new JMenu("File"); 
     file.add(load); 

     menuBar = new JMenuBar(); 
     menuBar.add(file); 

     hexArea = new JTextArea(); 
     byteArea = new JTextArea(); 

     hexScroll = new JScrollPane(); 
     byteScroll = new JScrollPane(); 

     hexScroll.add(hexArea); 
     hexScroll.setSize(500, 480); 
     byteScroll.add(byteArea); 
     byteScroll.setSize(500, 480); 

     setSize(640, 480); 
     //getContentPane().setBackground(Color.); 
     getContentPane().setLayout(new BorderLayout()); 
     getContentPane().add(BorderLayout.NORTH, menuBar); 
     getContentPane().add(BorderLayout.WEST, hexScroll); 
     getContentPane().add(BorderLayout.EAST, byteScroll); 
     pack(); 
     setVisible(true); 
    } 

    public static byte[] hexStringToByteArray(String s) { 
     int len = s.length() -1; 
     byte[] data = new byte[len/2]; 
     for (int i = 0; i < len; i += 2) { 
      data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); 
     } 
     return data; 
    } 


    public void openFile(){ 
     chooser.showOpenDialog(null); 
    } 

    public void packMe(){ 
     pack(); 
    } 

    public static void main(String[] args){ 
     HexEditor app = new HexEditor(); 
    } 
} 

回答

2

您的滚动条存在,但默认行为是只在需要时显示滚动条。要强制显示它们,请执行以下更改:

hexScroll = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
byteScroll = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 

由于BorderLayout的行为,您的滚动条非常窄。

0

只有BorderLayout的CENTER将被填充。您需要更改为另一种布局,例如GridBagLayout,并使用weightx,weighty和fill使其更加可见或嵌套BorderLayouts。但是,他们在那里,你不能看到他们,因为他们是小:)

我建议在看教程的GridBagLayout