当前位置: 首页 > 知识库问答 >
问题:

GUI FlowLayout,锁定所有组件位置

鄂慈
2023-03-14

以下是我所尝试的:

public class CopyFile extends JFrame{

private JFileChooser fc;
private JButton copyButton;
private JButton chooseFileButton;
private JButton destinationButton;
private File workingDirectory;
private JLabel sourceLabel;
private JTextArea displayCopyText;
private JLabel destinationLabel;
private JTextField sourceText;
private JLabel copyText;
private JTextField destinationText;

public static void main(String [] args) {
    CopyFile go = new CopyFile();
    go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    go.setSize(500, 150);
    go.setVisible(true);
}

public CopyFile() {
    super("Copy a text file");
    setLayout(new FlowLayout());
    fc = new JFileChooser();

    //Open dialog box inside project folder to make easier to find files
    workingDirectory = new File(System.getProperty("user.dir"));
    fc.setCurrentDirectory(workingDirectory);
    //create labels and buttons for window
    chooseFileButton = new JButton("CHOOSE SOURCE FILE");
    destinationButton = new JButton("DESTINATION FOLDER");
    copyButton = new JButton("COPY FILE");      
    sourceLabel = new JLabel("SOURCE FILE: ", JLabel.CENTER);
    sourceText = new JTextField(15);
    sourceText.setEditable(false);
    destinationText = new JTextField(15);
    destinationText.setEditable(false); 
    destinationLabel = new JLabel("DESTINATION:", JLabel.CENTER);
    //JScrollPane SP = new JScrollPane();       
    displayCopyText = new JTextArea();
    displayCopyText.setPreferredSize(new Dimension(300, 50));
    displayCopyText.setRows(2);
    displayCopyText.setLineWrap(true);
    displayCopyText.setWrapStyleWord(true);
    displayCopyText.setEditable(false);     



    //add everything to JFrame  
    add(sourceLabel);
    add(sourceText);
    add(chooseFileButton);  
    add(destinationLabel);
    add(destinationText);
    add(destinationButton);
    //add(copyText);
    add(displayCopyText);
    add(copyButton);

    //Create TheHandler object to add action listeners for the buttons.
    TheHandler handler = new TheHandler();
    chooseFileButton.addActionListener(handler);
    destinationButton.addActionListener(handler);
    copyButton.addActionListener(handler);
}

//Inner class to create action listeners    
private class TheHandler implements ActionListener {
    private File selectedDestinationFile;
    private File selectedSourceFile;
    private int returnVal;
    public void actionPerformed(ActionEvent event) {



        //Selecting a source file and displaying what the user is doing.
        if(event.getSource() == chooseFileButton) {     
            returnVal = fc.showOpenDialog(null);
            //Set the path for the source file. 
            if(returnVal == JFileChooser.APPROVE_OPTION) {  
                selectedSourceFile = fc.getSelectedFile();
                sourceText.setText(selectedSourceFile.getName());   
            }       
        }//end if

        //Handle destination button.
        if(event.getSource() == destinationButton) {
            returnVal = fc.showSaveDialog(null);
            if(returnVal == JFileChooser.APPROVE_OPTION) {
                selectedDestinationFile = fc.getSelectedFile();
                destinationText.setText(fc.getSelectedFile().getAbsolutePath());    
            }               
        }//end if

        //Handle copy button
        if(event.getSource() == copyButton) {
            Path sourcePath = selectedSourceFile.toPath();
            Path destinationPath = selectedDestinationFile.toPath();        
            try {
                Files.copy(sourcePath,  destinationPath);
            } catch (IOException e) {
                e.printStackTrace();
            }   

            if(returnVal == JFileChooser.APPROVE_OPTION) {      
                displayCopyText.append("SUCCESSFULLY COPIED:\n" 
                                + selectedDestinationFile.getName());   
            }
            else {
                displayCopyText.append("COPY WAS CANCELED BY USER.\n");
            }   
        }//end if

    }//end actionPerformed      
}//end TheHandler class
}//end class

共有1个答案

洪子晋
2023-03-14

您可以使用JFrame::SetResizable(false)锁定可调整大小的窗口。

所以您的代码可能像

public static void main(String[] args) {
        CopyFile go = new CopyFile();
        go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        go.setResizable(false);   //No resize is possible

       go.setSize(500, 150);
       go.setVisible(true);
}

这样可以解决你的这个问题

 类似资料:
  • 下面是适当的方法签名的样子: (问题领域是扑克;列举奥马哈扑克牌中所有可能的板卡组合。是的,还有其他方法可以解决这个问题,但我正在测试这个方法,因为处理比特比大多数其他选择要快得多。)

  • 我无法在线性布局中精确定位零部件。LinearLayout是水平的(ImageButton文本查看ImageButton)。下图显示了问题。相对于ImageButtons,数字(文本视图)没有垂直或水平居中。(红线表示中心)。正如您在代码中所看到的,我将TextView组件布局设置为center | center。数字始终在0到99之间。

  • 试图将我的旁边的表单与对齐,我正在努力将组件放到面板顶部。我需要价格标签和字段就在商品标签和字段下面,但我无法让它从面板底部移动。 如果我使用,这会将项目标签和字段移到顶部,但随后我就失去了用锚定它的能力。除非有办法两者兼得?请看我试图展示我想要放置表格的区域的图片。谢谢你的帮助。

  • 在最近的一次采访中,有人问我这个问题。一个三位数锁的键值可以在“000”-“999”之间。所以基本上必须尝试1000个组合才能打开锁。所以我必须生成最短的字符串,以便检查所有可能的组合(即“000”-“999”之间)。因此,例如,如果我们有字符串“01234”,那么它会检查组合“012”、“123”和“234”。所以我必须生成一个字符串来检查所有组合。我尝试使用哈希集来实现这一点,我从“000”开

  • 我有一个主框架,我想用卡片布局在中心位置显示我的新用户类的对象。这里是我的主类 这是我的新用户类 我希望NewUser的对象显示在主类的中心位置

  • 因此,我创建了2个 但后来我意识到2不是一个好主意,所以我添加了,然后尝试以的形式添加不同的选项卡。但是我不能像在中那样定位组件,它看起来是这样的。 但我希望它是这样的 我怎么能这么做?