Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JScrollPane没有出现?_Java_Swing_Hex_Jscrollpane - Fatal编程技术网

Java JScrollPane没有出现?

Java JScrollPane没有出现?,java,swing,hex,jscrollpane,Java,Swing,Hex,Jscrollpane,我的十六进制编辑器上有一些JScrollPanes,它们没有出现。 知道为什么吗 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.I

我的十六进制编辑器上有一些JScrollPanes,它们没有出现。 知道为什么吗

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();
    }
}
import java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
导入java.util.Vector;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.InputStream;
公共类HexEditor扩展了JFrame{
JScrollPane;
JScrollPane-byteScroll;
JTextareahexarea;
JTextareabytearea;
JFileChooser chooser;//=new JFileChooser();
文件输入流鳍;
梅努巴;
JMenu文件;
项目负荷;
公共编辑(){
超级(“Cypri的java十六进制编辑器”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//此参数为.setresizeable(false);
chooser=newjfilechooser();
加载=新项目(“加载”);
load.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件){
试一试{
openFile();
fin=新文件输入流(chooser.getSelectedFile());
int-ch;
StringBuffer strContent=新StringBuffer(“”);
对于(int i=0;(ch=fin.read())!=-1;i++){
字符串s=整数。toHexString(ch);
如果(s.长度()<2)
s=“0”+整数.tohextstring(ch);
如果(i<10)
追加(“+s.toUpperCase());
否则{
strContent.append(“+s.toUpperCase()+”\n”);
i=0;
}
}
setText(strContent.toString());
字节[]b=hexStringToByteArray(strContent.toString());
char[]chars=新字符[b.长度];
字符串byteText=“”;
int newLine=0;
for(int i=0;i10){
byteText+=“\n”;
换行=0;
}
}
setText(strContent.toString());
byteArea.setText(byteText);
packMe();
//textArea.setWrapStyleWord(true);
//textArea.setColumns(50);
//textArea.setRows(50);
}
捕获(例外e){
e、 printStackTrace();
}
}
});
文件=新JMenu(“文件”);
文件。添加(加载);
menuBar=newjmenubar();
menuBar.add(文件);
hexArea=新的JTextArea();
byteArea=新的JTextArea();
hexScroll=newJScrollPane();
byteScroll=新的JScrollPane();
添加(hexArea);
设置大小(500480);
byteScroll.add(byteArea);
byteScroll.setSize(500480);
设置大小(640480);
//getContentPane().setBackground(颜色);
getContentPane().setLayout(新的BorderLayout());
getContentPane().add(BorderLayout.NORTH,菜单栏);
getContentPane().add(BorderLayout.WEST,hexScroll);
getContentPane().add(BorderLayout.EAST,byteScroll);
包装();
setVisible(真);
}
公共静态字节[]hexStringToByteArray(字符串s){
int len=s.length()-1;
字节[]数据=新字节[len/2];
对于(int i=0;idata[i/2]=(byte)((Character.digit(s.charAt(i),16)您的滚动窗格在那里,但默认行为是仅在需要时显示滚动条。要强制显示滚动条,您可以进行以下更改:

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

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

只有BorderLayout的中心将被“填充”。您需要更改为另一个布局,如GridBagLayout,并使用weightx、weighty和fill使其更可见,或者嵌套您的BorderLayout。但是它们在那里,您无法看到它们,因为它们很小:)

我建议您阅读GridBagLayout的教程