我有一个扩展JFrame的类,它有一个BorderLayout.它有两个类型为JPanel的私有实例变量.它们代表按钮面板,称为flipButton和confidenceButtons.单击按钮时,按钮面板将被另一个按钮面板替换.也就是说,如果单击flipButton中的按钮,则flipButton将替换为confidenceButton.我试着这样做:
private class FlipListener implements ActionListener{ public void actionPerformed(ActionEvent e){ remove(flipButton); add(confidenceButtons,BorderLayout.SOUTH); validate(); ... } } private class ColorListener implements ActionListener{ ... public void actionPerformed(ActionEvent e){ ... remove(confidenceButtons); add(flipButton,BorderLayout.SOUTH); validate(); } }
flipButton中的按钮具有FlipListeners,而ConfidentButton中的按钮具有ColorListeners.程序运行时,单击按钮将删除面板,但不会添加任何内容来替换它.我究竟做错了什么?
编辑
CardLayout原来是一个简单易行的解决方案.事实证明,上面的代码确实有效; 问题是我的代码的另一部分中的拼写错误.>.但是,我总是在使用这些方法时遇到了麻烦,我发现CardLayout简化了它.谢谢.
我试图从文本文件中删除一行文本而不复制到临时文件.我试图通过使用Printwriter和扫描仪并让它们同时遍历文件来做到这一点,作者写下扫描仪读取的内容并用相同的东西覆盖每一行,直到它到达我想要的行删除.然后,我推进扫描仪而不是编写器,并继续像以前一样.这是代码:
但首先,参数:我的文件名是数字,所以这将读取1.txt或2.txt等,因此f指定文件名.我将它转换为文件的构造函数中的String.Int n是我要删除的行的索引.
public void deleteLine(int f, int n){
try{
Scanner reader = new Scanner(new File(f+".txt"));
PrintWriter writer = new PrintWriter(new FileWriter(new File(f+".txt")),false);
for(int w=0; w<n; w++)
writer.write(reader.nextLine());
reader.nextLine();
while(reader.hasNextLine())
writer.write(reader.nextLine());
} catch(Exception e){
System.err.println("Enjoy the stack trace!");
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
它给了我奇怪的错误.它在堆栈跟踪中显示"NoSuchElementException"和"no line found".它指向不同的线条; 似乎任何nextLine()调用都可以做到这一点.是否可以通过这种方式删除一行?如果是这样,我做错了什么?如果没有,为什么?(顺便说一下,如果你想要这个,那么文本文件大概就是500行.不过,我不知道这是不是很重要,甚至不重要.)
这很简单,我想做什么,但我无法想办法.在JFrame或JPanel中,如何垂直居中组件?也就是说,类似于在HTML中使用中心标记.组件位于列中,它们都居中.
我尝试过使用Y_AXIS和PAGE_AXIS的BoxLayout,但它以一种奇怪的方式对齐我的组件.我试图使用FlowLayout设置首选大小,以便它包裹,但它不会居中.除非它真的是唯一的选择,否则我宁愿不使用像GridBagLayout这样强大的东西来做这么简单的事情.救命!