Java JColorChooser和JFileChooser打开问题
我想从中以编程方式显示对话框Java JColorChooser和JFileChooser打开问题,java,swing,Java,Swing,我想从中以编程方式显示对话框JColorChooser和JFileChooser 提交按钮时调用的方法 单击按钮后,将调用该方法,但不会显示对话框 我有一个带有空布局(绝对定位)的JFrame,例如,以下代码: public class _TEST_ extends JFrame { private JColorChooser color_chooser; private JFileChooser file_chooser; public _TEST_() {
JColorChooser
和JFileChooser
提交按钮时调用的方法
单击按钮后,将调用该方法,但不会显示对话框
我有一个带有空布局(绝对定位)的JFrame,例如,以下代码:
public class _TEST_ extends JFrame
{
private JColorChooser color_chooser;
private JFileChooser file_chooser;
public _TEST_()
{
super("_TEST_");
setLayout(null);
final JButton b = new JButton("Color chooser");
final JButton b2 = new JButton("File chooser");
ActionListener al = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == b)
{
createJColorChooser();
}
else if (e.getSource() == b2)
{
createJFileChooser();
}
}
};
b.addActionListener(al);
b2.addActionListener(al);
b.setBounds(1, 1, 160, 20);
b2.setBounds(1, 30, 160, 20);
add(b);
add(b2);
}
public void createJColorChooser()
{
color_chooser = new JColorChooser();
color_chooser.setBounds(1, 70, 225, 50);
add(color_chooser);
repaint();
}
public void createJFileChooser()
{
file_chooser = new JFileChooser();
file_chooser.setBounds(330, 70, 225, 50);
add(file_chooser);
repaint();
}
public static void main(String args[])
{
_TEST_ window = new _TEST_();
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
window.setLocationRelativeTo(null);
}
}
怎么了?如果要添加到已显示的帧,则需要重新验证帧:
frame.validate();
从frame.add(…)的JavaDocs中:
注意:如果组件已添加到已显示的容器中,则必须进行验证
在该容器上调用以显示新组件
如果要使颜色选择器显示在单独的对话框中(通常的方法),请执行以下操作:
final Color color = JColorChooser.showDialog(null, "Choose a color", Color.BLUE);
对于JFileChooser,这里是一种典型的方法:
JFileChooser ch = new JFileChooser();
ch.showOpenDialog(null);
这两个对话框的JavaDocs有很好的工作示例。如果要添加到已经可见的框架,则需要重新验证该框架:
frame.validate();
从frame.add(…)的JavaDocs中:
注意:如果组件已添加到已显示的容器中,则必须进行验证
在该容器上调用以显示新组件
如果要使颜色选择器显示在单独的对话框中(通常的方法),请执行以下操作:
final Color color = JColorChooser.showDialog(null, "Choose a color", Color.BLUE);
对于JFileChooser,这里是一种典型的方法:
JFileChooser ch = new JFileChooser();
ch.showOpenDialog(null);
这两个对话框的JavaDocs有很好的工作示例。通常我会将组件添加到特定面板,而不是直接添加到框架,因此我会使用:
panel.add( someComponent );
panel.revalidate();
panel.repaint(); // sometimes required
但是在这种情况下,您可以使用validate()方法:
编辑:当然,您还应该使用组件的首选大小,以便整个组件可见。现在,您需要做的就是添加所有代码,以便在用户做出选择时做出响应。这是一个很大的工作,这就是为什么最好使用每个类的对话框版本。通常我会将组件添加到特定的面板,而不是直接添加到框架,因此我会使用:
panel.add( someComponent );
panel.revalidate();
panel.repaint(); // sometimes required
但是在这种情况下,您可以使用validate()方法:
编辑:当然,您还应该使用组件的首选大小,以便整个组件可见。现在,您需要做的就是添加所有代码,以便在用户做出选择时做出响应。这需要大量的工作,这就是为什么最好使用每个类的对话框版本。(请参阅@Steve McLeod中的注释了解上下文。)
JColorChooser
和JFileChooser
不是常规的JComponent
s。您可以将它们添加到容器中,但看不到任何内容,因为JColorChooser
的UI没有绘制,而JFileChooser
甚至没有UI
在Steve的回答中,您可以使用JColorChooser#showDialog
和JFileCHooser#showOpenDialog
获得模态对话框,这是正确的使用方式
如果确实需要,可以调用JColorChooser#createDialog
,然后抓取其内容窗格(您可以对任何顶级容器执行此操作):
您可以覆盖JFileChooser
以公开其createDialog
,但请不要这样做。文件选择器应始终是模态对话框。(有关上下文,请参阅@Steve McLeod中的注释。)
JColorChooser
和JFileChooser
不是常规的JComponent
s。您可以将它们添加到容器中,但看不到任何内容,因为JColorChooser
的UI没有绘制,而JFileChooser
甚至没有UI
在Steve的回答中,您可以使用JColorChooser#showDialog
和JFileCHooser#showOpenDialog
获得模态对话框,这是正确的使用方式
如果确实需要,可以调用JColorChooser#createDialog
,然后抓取其内容窗格(您可以对任何顶级容器执行此操作):
您可以覆盖
JFileChooser
以公开其createDialog
,但请不要这样做。文件选择器应该始终是模态对话框。我想在框架容器中显示对话框。。。但也与无效无功!根据定义,对话框是顶级容器。也就是说,类似于JFrames。不能在框架容器中显示对话框。@史蒂夫,这不对。我可以将这些对话框直接添加到JFrame内容窗格中。事实上,这个语句可以做到:add(color_choser,BorderLayout.CENTER)。问题可能是没有布局管理器的窗格…这不是添加对话框。这是在添加一个面板。在你的问题中,你提到了对话框,所以我假设你想要一个对话框。哦…你必须调用validate()而不是invalidate()。。。用validate()替换示例代码中的repaint()行,代码示例就可以工作了。我想在框架容器中显示对话框。。。但也与无效无功!根据定义,对话框是顶级容器。也就是说,类似于JFrames。不能在框架容器中显示对话框。@史蒂夫,这不对。我可以将这些对话框直接添加到JFrame内容窗格中。事实上,这个语句可以做到:add(color_choser,BorderLayout.CENTER)。问题可能是没有布局管理器的窗格…这不是添加对话框。这是在添加一个面板。在你的问题中,你提到了对话框,所以我假设你想要一个对话框。哦…你必须调用validate()而不是invalidate()。。。用validate()替换示例代码中的repaint()行,代码示例就可以工作了。您能否发布一个自包含的代码示例,以及一个main方法,来演示这个问题?这里没有足够的代码来解决问题。请用validate()替换示例代码中的repaint()行,并使用代码示例工作使问题不太依赖于标题;如果不正确,请还原。您是否可以发布一个自包含的代码示例,其中包含一个main方法,以演示问题?这里没有足够的代码来解决问题。请替换